Как разделить определенные элементы вложенного списка - PullRequest
0 голосов
/ 07 июня 2018

Я довольно новичок в Python3, и у меня возникает следующая проблема:

У меня есть структура вложенного списка строк:

lst = [['foo', 'bar foo bar', 'foo bar'], 
       ['foo', 'bar foo bar', 'foo bar'],
       ['foo', 'bar foo bar', 'foo bar']]

Так чего я, по сути, хочу достичьэто взять элемент [1] каждого вложенного списка и разделить его для получения другого гнезда в списке, например:

lst = [['foo' , ['bar', 'foo', 'bar'], 'foo bar'],
       ['foo' , ['bar', 'foo', 'bar'], 'foo bar'],
       ['foo' , ['bar', 'foo', 'bar'], 'foo bar']]

Я использовал списочное понимание, чтобы разделить этот элемент, но в своем собственном отдельном списке, так чтов этом случае исходные элементы [0] и [2] из каждого списка отсутствуют:

split_lst = [lst[1].split('\n') for lst in split_list]

Как можно разделить этот элемент, но сохранить его в исходном списке со всеми другими элементами?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, это то, что вам нужно, я использую просто список cmpr и map

[map(lambda x : list(x.split()) if y.index(x)==1 else x, y) for y in lst]

В этом случае ввод:

lst = [['foo', 'bar foo bar', 'foo bar'], 
   ['foo', 'bar foo bar', 'foo bar'],
   ['foo', 'bar foo bar', 'foo bar']]

и вывод:

[['foo', ['bar', 'foo', 'bar'], 'foo bar'], 
['foo', ['bar', 'foo', 'bar'], 'foo bar'], 
['foo', ['bar', 'foo', 'bar'], 'foo bar']]
0 голосов
/ 07 июня 2018

Понимание списка имеет свою область видимости.Вы не можете использовать его для изменения элементов списка на месте.

Вместо этого вы можете использовать цикл for:

lst = [['foo', 'bar foo bar', 'foo bar'], 
       ['foo', 'bar foo bar', 'foo bar'],
       ['foo', 'bar foo bar', 'foo bar']]

for item in lst:
    item[1] = item[1].split()

print(lst)

[['foo', ['bar', 'foo', 'bar'], 'foo bar'],
 ['foo', ['bar', 'foo', 'bar'], 'foo bar'],
 ['foo', ['bar', 'foo', 'bar'], 'foo bar']]

Однако, если вы хотите использовать понимание списка,вам нужно явно сформировать список списков:

res = [[i, j.split(), k] for i, j, k in lst]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...