【问题标题】:Indexing a nested list in python在python中索引嵌套列表
【发布时间】:2013-12-18 09:57:53
【问题描述】:

给定data

data = [ [0, 1], [2,3] ]

我想索引列表列表中列表中的所有第一个元素。即我需要索引02

我试过了

print data[:][0]

但它输出完整的第一个列表。即

[0,1]

偶数

print data[0][:]

产生相同的结果。

我的问题具体是如何完成我提到的。更一般地说,python 如何处理双重/嵌套列表?

【问题讨论】:

标签: python list python-2.7 multidimensional-array


【解决方案1】:

使用list comprehension:

>>> data = [[0, 1], [2,3]]
>>> [lst[0] for lst in data]
[0, 2]
>>> [first for first, second in data]
[0, 2]

使用map

>>> map(lambda lst: lst[0], data)
[0, 2]

mapoperator.itemgetter 一起使用:

>>> import operator
>>> map(operator.itemgetter(0), data)
[0, 2]

使用zip

>>> zip(*data)[0]
(0, 2)

【讨论】:

    【解决方案2】:

    这种东西,我一般推荐numpy

    >>> data = np.array([ [0, 1], [2,3] ])
    >>> data[:,0]
    array([0, 2])
    

    就您的情况而言,python 是如何处理它的:

    data[:][0]
    

    复制整个列表,然后获取第一个元素(即第一个子列表)。

    data[0][:]
    

    获取第一个子列表,然后复制它。

    【讨论】:

      【解决方案3】:

      list 索引或嵌套通常(无论是dictlist 还是任何其他可迭代的)从左到右工作。因此,

      data[:][0]
      

      会变成

      (data[:]) [0] == ([[0, 1], [2,3]]) [0]
      

      最终给你

      [0, 1]
      

      至于可能的解决方法或适当的方法,falsetru & mgilson 在这方面做得很好。

      【讨论】:

        【解决方案4】:

        试试这个:

        print [x for x, y in data[:]]
        

        【讨论】:

        • 为什么是data[:]?它可能只是data。 (而且,看起来 OP 不需要一个新的列表来进行操作)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2013-11-26
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多