[英]Combining lists of lists in python
我想合并列表列表,这是下面的示例
mylist = [[['a', 'b'], ['c', 'd']],
[['e', 'f'], ['g', 'h']]]
输出应为:
output = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
我也尝试使用itertools
,但这是它返回的内容
>>> combined = list(itertools.chain.from_iterable(mylist))
>>> combined
>>> [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]
我如何实现这一目标['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
谁能强调我所缺少的东西?
itertools
方法不起作用的原因是因为您拥有的不是列表列表,而是列表列表。 itertools
工作正常,只需将列表弄平一次。 使用部分展平的列表作为参数再次调用完全相同的函数将起作用:
flat = list(itertools.chain.from_iterable(itertools.chain.from_iterable(mylist)))
或者,一个简单的列表理解解决方案:
flat = [item for slist in mylist for sslist in slist for item in sslist]
这基本上转化为:
for slist in mylist:
for sslist in slist:
for item in sslist:
flat.append(item)
请记住,这两种解决方案仅适用于处理双重嵌套。 如果有可能您将不得不处理更多的嵌套,建议您查找如何展平任意嵌套列表。
正如其他人所指出的,您这里有两个级别,因此需要两个调用chain
。 但是您实际上并不需要from_iterable
调用; 您可以改用*
语法:
list(itertools.chain(*itertools.chain(*mylist)))
import numpy as np
mylist = [ [['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']] ]
a = np.array(mylist).flatten().tolist()
print(a)
输出:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.