用文本文件中的相应行替换列表列表中的数字

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', '.']]