【发布时间】:2014-02-05 06:11:06
【问题描述】:
我的清单是:
a = [[1,2], [23,51,6], ["Hi", "hello"]]
我想要输出:
a = [ 1,2,23 51,6, "Hi", "hello"]
【问题讨论】:
标签: python list python-2.7
我的清单是:
a = [[1,2], [23,51,6], ["Hi", "hello"]]
我想要输出:
a = [ 1,2,23 51,6, "Hi", "hello"]
【问题讨论】:
标签: python list python-2.7
>>> a = [[1,2], [23,51,6], ["Hi", "hello"]]
>>> [x for xs in a for x in xs]
[1, 2, 23, 51, 6, 'Hi', 'hello']
【讨论】:
sum 有效,但它会导致不必要的 O(n^2) 性能。即使您希望输入较小的大小,它也几乎不应该用于此。
sum的解决方案。
将sum 与两个参数一起使用,列表列表和要添加到的空列表:
>>> sum(a, [])
[1, 2, 23, 51, 6, 'Hi', 'hello']
这确实是reduce的特例:
>>> reduce(list.__add__, a)
[1, 2, 23, 51, 6, 'Hi', 'hello']
事实上,我相信 Guido 从 Python 3 的内置函数中删除 reduce 的理由是大多数人只是使用它来添加事物列表(通常是数字)。一旦添加了sum 函数,reduce 就变得不那么重要了。 Python 3 需要导入才能使用 reduce。
如果您不关心导入模块,另一个选项是itertools.chain,它返回一个迭代器,该迭代器迭代其所有参数中的所有元素。您可以使用 list 构造函数将该迭代器转换为列表:
>>> import itertools
>>> list(itertools.chain(*a))
[1, 2, 23, 51, 6, 'Hi', 'hello']
【讨论】:
sum 有效,但当线性时间解决方案现成可用时,它会导致不必要的 O(n^2) 性能。
你可以使用itertools.chain.from_iterable方法:
>>> from itertools import chain
>>> a = [[1,2], [23,51,6], ["Hi", "hello"]]
>>> list(chain.from_iterable(a))
[1, 2, 23, 51, 6, 'Hi', 'hello']
请注意,这不适用于超过 2 层的嵌套。
【讨论】: