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

4

我很新于Python3,我遇到的问题是:

我有一个嵌套的字符串列表结构:

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

所以我想要实现的基本上是获取每个嵌套列表的第一个元素并将其拆分,以便在列表中获得另一个嵌套,例如:

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]

我该如何拆分此元素并将其保留在原始列表中与所有其他元素一起?

我已经发布了我的建议,正是你所需要的。 - khelili miliana
2个回答

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
太好了,谢谢!我最初尝试过这个方法,但忘记在原始变量中指定元素了。 - CharlieR

0

我认为这就是你需要的,我使用了列表比较和映射

[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']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接