Замена чисел в списке списков соответствующими строками из текстового файла - PullRequest
1 голос
/ 11 июня 2019

У меня такой большой текстовый файл (без пробела между словами, но каждое слово в каждой строке):

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...

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы очень близки. Просто используйте временный список и добавьте его в основной список. Также вы можете использовать str.strip для удаления символа новой строки.

Ex:

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. 
0 голосов
/ 11 июня 2019

Вы можете использовать iter, чтобы сделать это, если у вас text_list столько же элементов, сколько sum(map(len, index_list))

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