我是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]
如何拆分此元素,但将其保留在包含所有其他元素的原始列表中?
答案 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']]