如何拆分嵌套列表的定义元素

时间:2018-06-07 11:20:12

标签: python python-3.x list nested

我是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']]

我使用list comprehension来分割这个元素但是在它自己的单独列表中,所以在这种情况下,每个列表中的原始元素[0]和[2]都丢失了:

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

如何拆分此元素,但将其保留在包含所有其他元素的原始列表中?

2 个答案:

答案 0 :(得分:3)

列表理解有其自己的范围。您无法使用它来更改列表中的元素。

相反,您可以使用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]

答案 1 :(得分:0)

我认为这就是你需要的,我只使用list 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']]