在Python中将二维数组变为一维数组
我在尝试把一个数组“扁平化”,也就是把它转换成只有一维的项目集合。我使用了append命令,结果是这样的:
[['X', 'X'],['ff','ff','ff','ff','ff']]
不过我更希望这些元素能按以下方式排序:
['X','X','ff','ff','ff','ff','ff']
我不能使用string.join()或string.split()这些操作。那么,有什么更合理的方法来实现这个呢?
4 个回答
1
为了完整起见,总是有
In [1]: x = [['X', 'X'], ['ff', 'ff', 'ff', 'ff', 'ff']]
In [2]: sum(x, [])
Out[2]: ['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
但是
In [3]: [item for sublist in x for item in sublist]
Out[3]: ['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
应该会更快,并且
In [4]: from itertools import chain
In [5]: list(chain.from_iterable(x))
Out[5]: ['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
应该是最快的。
2
可以使用 itertools.chain
或者 extend()
方法。
>>> from itertools import chain
>>> oldList = [['X', 'X'],['ff','ff','ff','ff','ff']]
>>> list(chain.from_iterable(oldList))
['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
>>> list1 = ['X', 'X']
>>> list1.extend(['ff','ff','ff','ff','ff'])
>>> list1
['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
3
使用列表推导式:
alist = [['X', 'X'],['ff','ff','ff','ff','ff']]
print [j for i in alist for j in i ]
使用reduce函数:
reduce(lambda r,x:r+x, alist,[])
输出结果:
['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']
4
我觉得你想要的是extend()而不是append()
>>> oldList = [['X', 'X'],['ff','ff','ff','ff','ff']]
>>> print oldList
[['X', 'X'], ['ff', 'ff', 'ff', 'ff', 'ff']]
>>> newList = []
>>> for item in oldList:
... newList.extend( item )
>>> print newList
>>> ['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']