使用第二维索引将2-D列表转换为1-D

时间:2014-09-12 12:54:40

标签: python arrays list

我们说我有一个清单:

  
    

l = [[1,2,3],[4,5,6]]

  

是否有任何Pythonic方法可以获取所有内部列表的每个第二个元素的列表而无需迭代并创建新列表?

预期输出为:

  
    

升     [2,5]

  

我感谢任何帮助!我一直在寻找可能的解决方案,并且无法找到解决方案。

4 个答案:

答案 0 :(得分:2)

这在numpy中是微不足道的,其中切片语法扩展到多个维度:

>>> import numpy as np
>>> a = np.arange(1, 7).reshape(2, 3)
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a[:,1]
array([2, 5])

在vanilla列表中,您必须迭代并创建列表,例如使用列表理解:

>>> lst = [[1, 2, 3], [4, 5, 6]]
>>> [l[1] for l in lst]
[2, 5]

或将mapoperator.itemgetter一起使用:

>>> from operator import itemgetter
>>> map(itemgetter(1), lst)
[2, 5]

(请注意,您不应该调用自己的变量list,因为它会影响内置变量。)

答案 1 :(得分:1)

zip()与*运算符一起用于解压缩列表:

>>> zip(*l)
[(1, 4), (2, 5), (3, 6)]
>>> zip(*l)[1]
(2, 5)

使用Python 3.x:

list(zip(*l))[1] #zip gives an iterator

答案 2 :(得分:1)

我认为这不错:

>>> list = [ [1,2,3],[4,5,6] ]
>>> map(lambda el: el[1], list)
[2, 5]

答案 3 :(得分:0)

list = [ [1,2,3],[4,5,6] ]

#This will do it, but requires iteration
list = [subList[1] for subList in list]

#This does it *without* iteration, but really 
#it's just the unwinding of a very small loop,
#which is jsut a way of cheating around that
#stipulation, and it's not pythonic...
list = [list[0][1], list[1][1]]