用文本文件中的相应行替换列表列表中的数字
Replacing numbers in a list of lists with corresponding lines from a text file
我有一个像这样的大文本文件(单词之间没有空格 space 但每行中的每个单词):
this
is
my
text
and
it
should
be
awesome
.
我也有一个这样的列表:
index_list = [[1,2,3,4,5],[6,7,8][9,10]]
现在我想用我的文本文件的相应索引行替换每个列表的每个元素,所以预期的答案是:
new_list = [[this, is, my, text, and],[it, should, be],[awesome, .]
我尝试了一个令人讨厌的解决方法,其中有两个 for 循环和一个太复杂的范围函数(我是这么认为的)。然后我用 linecache.getline
试了一下,但也有一些问题:
import linecache
new_list = []
for l in index_list:
for j in l:
new_list.append(linecache.getline('text_list', j))
这只会产生一个大列表,这是我不想要的。另外,在每个单词之后我都会得到一个错误的 \n
,当我用 b = open('text_list', 'r').read.splitlines()
打开文件时我没有得到,但我不知道如何在我的替换函数中实现它(或者创建,而是)所以我没有得到 [['this\n' ,'is\n' , etc...
你们很亲近。只需使用临时列表并将其附加到主列表即可。您也可以使用 str.strip
删除换行符。
例如:
import linecache
new_list = []
index_list = [[1,2,3,4,5],[6,7,8],[9,10]]
for l in index_list:
temp = [] #Temp List
for j in l:
temp.append(linecache.getline('text_list', j).strip())
new_list.append(temp) #Append to main list.
只要 text_list
的元素数量与 sum(map(len, index_list))
的元素数量完全一样,您就可以使用 iter
来完成此操作
text_list = ['this', 'is', 'my', 'text', 'and', 'it', 'should', 'be', 'awesome', '.']
index_list = [[1,2,3,4,5],[6,7,8],[9,10]]
text_list_iter = iter(text_list)
texts = [[next(text_list_iter) for _ in index] for index in index_list]
输出
[['this', 'is', 'my', 'text', 'and'], ['it', 'should', 'be'], ['awesome', '.']]
但我不确定这是否是您想要做的。也许我假设 index_list 的某种排序。我能想到的另一个答案是这个列表理解
texts_ = [[text_list[i-1] for i in l] for l in index_list]
输出
[['this', 'is', 'my', 'text', 'and'], ['it', 'should', 'be'], ['awesome', '.']]
我有一个像这样的大文本文件(单词之间没有空格 space 但每行中的每个单词):
this
is
my
text
and
it
should
be
awesome
.
我也有一个这样的列表:
index_list = [[1,2,3,4,5],[6,7,8][9,10]]
现在我想用我的文本文件的相应索引行替换每个列表的每个元素,所以预期的答案是:
new_list = [[this, is, my, text, and],[it, should, be],[awesome, .]
我尝试了一个令人讨厌的解决方法,其中有两个 for 循环和一个太复杂的范围函数(我是这么认为的)。然后我用 linecache.getline
试了一下,但也有一些问题:
import linecache
new_list = []
for l in index_list:
for j in l:
new_list.append(linecache.getline('text_list', j))
这只会产生一个大列表,这是我不想要的。另外,在每个单词之后我都会得到一个错误的 \n
,当我用 b = open('text_list', 'r').read.splitlines()
打开文件时我没有得到,但我不知道如何在我的替换函数中实现它(或者创建,而是)所以我没有得到 [['this\n' ,'is\n' , etc...
你们很亲近。只需使用临时列表并将其附加到主列表即可。您也可以使用 str.strip
删除换行符。
例如:
import linecache
new_list = []
index_list = [[1,2,3,4,5],[6,7,8],[9,10]]
for l in index_list:
temp = [] #Temp List
for j in l:
temp.append(linecache.getline('text_list', j).strip())
new_list.append(temp) #Append to main list.
只要 text_list
的元素数量与 sum(map(len, index_list))
iter
来完成此操作
text_list = ['this', 'is', 'my', 'text', 'and', 'it', 'should', 'be', 'awesome', '.']
index_list = [[1,2,3,4,5],[6,7,8],[9,10]]
text_list_iter = iter(text_list)
texts = [[next(text_list_iter) for _ in index] for index in index_list]
输出
[['this', 'is', 'my', 'text', 'and'], ['it', 'should', 'be'], ['awesome', '.']]
但我不确定这是否是您想要做的。也许我假设 index_list 的某种排序。我能想到的另一个答案是这个列表理解
texts_ = [[text_list[i-1] for i in l] for l in index_list]
输出
[['this', 'is', 'my', 'text', 'and'], ['it', 'should', 'be'], ['awesome', '.']]