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

use*_*548 1 python python-3.x

使用2维数组,看起来像这样:

myarray = [['jacob','mary'],['jack','white'],['fantasy','clothes'],['heat','abc'],['edf','fgc']]
Run Code Online (Sandbox Code Playgroud)

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

mylist = ['jacob','mary','jack','white','fantasy','clothes','heat','abc','edf','fgc']
Run Code Online (Sandbox Code Playgroud)

这是我的解决方案

mylist = []
for x in myarray:
   mylist.extend(x)
Run Code Online (Sandbox Code Playgroud)

我猜应该更简单

Mar*_*ers 8

用途itertools.chain.from_iterable:

from itertools import chain
mylist = list(chain.from_iterable(myarray))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

但是,Haidro的sum()解决方案对于您的较短样本来说更快:

>>> 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
Run Code Online (Sandbox Code Playgroud)

但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
Run Code Online (Sandbox Code Playgroud)


Ter*_*ryA 5

>>> myarray = [['jacob','mary'],['jack','white'],['fantasy','clothes'],['heat','abc'],['edf','fgc']]
>>> sum(myarray,[])
['jacob', 'mary', 'jack', 'white', 'fantasy', 'clothes', 'heat', 'abc', 'edf', 'fgc']
Run Code Online (Sandbox Code Playgroud)

要么

>>> [i for j in myarray for i in j]
['jacob', 'mary', 'jack', 'white', 'fantasy', 'clothes', 'heat', 'abc', 'edf', 'fgc']
Run Code Online (Sandbox Code Playgroud)