在Python中将二维数组变为一维数组

0 投票
4 回答
1615 浏览
提问于 2025-04-17 23:19

我在尝试把一个数组“扁平化”,也就是把它转换成只有一维的项目集合。我使用了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']

撰写回答