【问题标题】:Make 2D array 1-dimensional in Python [duplicate]在Python中使二维数组一维[重复]
【发布时间】:2014-04-29 03:23:07
【问题描述】:

我试图“展平”一个数组,将其转换为 1 个单维项目集。我使用 append 命令,我得到了这个:

[['X', 'X'],['ff','ff','ff','ff','ff']]

但我更希望将元素排序为:

['X','X','ff','ff','ff','ff','ff']

我不能使用 string.join() 或 string.split() 运算符。那么执行此操作的最明智的方式是什么?

【问题讨论】:

  • 本网站的部分目的是作为常见问题解决方案的存储库。您的问题是一个非常常见的问题,并且已经在这里被问过很多次了。使用右上角附近的搜索框查找“python flatten”,您将获得大量点击。 Here 特别是在最顶部,承认并链接到早期的 Stack Overflow 问题。

标签: python arrays 2d flatten


【解决方案1】:

使用列表推导:

alist = [['X', 'X'],['ff','ff','ff','ff','ff']]
print [j for i in alist for j in i ]

使用减少:

reduce(lambda r,x:r+x, alist,[])

输出:

['X', 'X', 'ff', 'ff', 'ff', 'ff', 'ff']

【讨论】:

  • 根据this post,列表理解比reduce(lambda...)快很多
【解决方案2】:

我认为您正在寻找的是 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']

【讨论】:

    【解决方案3】:

    使用itertools.chainextend()

    >>> 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']
    

    【讨论】:

    • chain.from_iterable(oldList) 优先于 chain(*oldList),因为后者会将可迭代对象首先解析为 tuple
    • @mgilson 谢谢,已编辑。
    【解决方案4】:

    为了完整起见,总是有

    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']
    

    应该是最快的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2010-11-29
      • 2014-04-23
      相关资源
      最近更新 更多