如何将所有数组的元素添加到python中的一个列表中[重复]

Posted

技术标签:

【中文标题】如何将所有数组的元素添加到python中的一个列表中[重复]【英文标题】:how to add all array's elements to one list in python [duplicate] 【发布时间】:2013-04-25 08:44:36 【问题描述】:

有一个看起来像这样的二维数组:

myarray = [['jacob','mary'],['jack','white'],['fantasy','clothes'],['heat','abc'],['edf','fgc']]

每个元素都是一个具有固定长度元素的数组。如何成为这个,

mylist = ['jacob','mary','jack','white','fantasy','clothes','heat','abc','edf','fgc']

这是我的解决方案

mylist = []
for x in myarray:
   mylist.extend(x)

我猜应该更简单

【问题讨论】:

【参考方案1】:

使用itertools.chain.from_iterable:

from itertools import chain
mylist = list(chain.from_iterable(myarray))

演示:

>>> from itertools import chain
>>> myarray = [['jacob','mary'],['jack','white'],['fantasy','clothes'],['heat','abc'],['edf','fgc']]
>>> list(chain.from_iterable(myarray))
['jacob', 'mary', 'jack', 'white', 'fantasy', 'clothes', 'heat', 'abc', 'edf', 'fgc']

但是,Haidro's sum() solution 对于较短的样本更快:

>>> timeit.timeit('f()', 'from __main__ import withchain as f')
2.858742465992691
>>> timeit.timeit('f()', 'from __main__ import withsum as f')
1.6423718839942012
>>> timeit.timeit('f()', 'from __main__ import withlistcomp as f')
2.0854451240156777

但如果输入变大,itertools.chain 获胜:

>>> myarray *= 100
>>> timeit.timeit('f()', 'from __main__ import withchain as f', number=25000)
1.6583486960153095
>>> timeit.timeit('f()', 'from __main__ import withsum as f', number=25000)
23.100156371016055
>>> timeit.timeit('f()', 'from __main__ import withlistcomp as f', number=25000)
2.093297885992797

【讨论】:

itertools for win +1 100000 列表中尝试sum 并看到它惨死! @jamylak:已经这样做了:-) @MartijnPieters 是的,每当我发表评论时,您似乎总是这样做,下次我不会打扰 :)【参考方案2】:
>>> myarray = [['jacob','mary'],['jack','white'],['fantasy','clothes'],['heat','abc'],['edf','fgc']]
>>> sum(myarray,[])
['jacob', 'mary', 'jack', 'white', 'fantasy', 'clothes', 'heat', 'abc', 'edf', 'fgc']

或者

>>> [i for j in myarray for i in j]
['jacob', 'mary', 'jack', 'white', 'fantasy', 'clothes', 'heat', 'abc', 'edf', 'fgc']

【讨论】:

我不明白为什么这条线可以工作?sum(myarray,[]),[] 是否暗示这是一个列表添加?为什么不 sum(myarray,list)? @user2003548 查看有关 sum 函数的 python 文档:docs.python.org/2/library/functions.html#sum。几乎,您遍历myarray 并将每个元素添加到start 参数中,这里是[]。所以[] + ['jacob','mary'] == ['jacob', 'mary'] 等等所有其他元素 @user2003548 我会尝试用另一个例子来解释它。第二个参数的默认值为0sum([1,2,3], 0) == 6(这是您通常所期望的。)现在,执行 sum([1,2,3], 4) 等于 10,因为您将列表的所有值添加到 4。

以上是关于如何将所有数组的元素添加到python中的一个列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python 列表/数组方法

Python 列表/数组方法

当我尝试从网页添加 DOM 元素时,我的数组得到 0 值,如何将值添加到 .each 函数中的列表?

将一个数字与 Python 中列表(或数组)中的每个元素相加

Python如何将列表中的元素添加到另一个字符串列表中

将元素添加到 python 生成器