【问题标题】:Extract array from list in python从python中的列表中提取数组
【发布时间】:2010-10-14 12:27:13
【问题描述】:

如果我有这样的列表:

>>> data = [(1,2),(40,2),(9,80)]

如何提取两个列表 [1,40,9] 和 [2,2,80] ?当然我可以自己迭代和提取数字,但我想有更好的方法吗?

【问题讨论】:

  • 这不是“提取”。这有时被称为“枢轴”。您正在更改列表的结构,而不是从中提取子集。

标签: python arrays list


【解决方案1】:

解压操作是:

In [1]: data = [(1,2),(40,2),(9,80)]
In [2]: zip(*data)
Out[2]: [(1, 40, 9), (2, 2, 80)]

编辑:您可以分解分配的结果列表:

In [3]: first_elements, second_elements = zip(*data)

如果你真的需要列表作为结果:

In [4]: first_elements, second_elements = map(list, zip(*data))

为了更好地理解为什么会这样:

zip(*data)

等价于

zip((1,2), (40,2), (9,80))

结果列表中的两个元组是根据 zip() 参数的第一个元素和 zip() 参数的第二个元素构建的。

【讨论】:

    【解决方案2】:

    列表推导节省了一天的时间:

    first = [x for (x,y) in data]
    second = [y for (x,y) in data]
    

    【讨论】:

      【解决方案3】:

      还有

      In [1]: data = [(1,2),(40,2),(9,80)]
      In [2]: x=map(None, *data)
      Out[2]: [(1, 40, 9), (2, 2, 80)]
      In [3]: map(None,*x)
      Out[3]: [(1, 2), (40, 2), (9, 80)]
      

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 2011-05-04
        • 2021-06-22
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        相关资源
        最近更新 更多