来自多维列表的特定索引的新列表?

时间:2013-03-02 04:55:52

标签: python python-2.7

我基本上试图将多维列表中的一些数据提取到一个新列表中。虽然这段代码做了我想要的,但我想知道是否有更好的方法来获得这个结果而不循环原始列表?

aa = [
    ["a", "aa", "aaa"],
    ["b", "bb", "bbb"],
    ["c", "cc", "ccc"],
]
b = []
for a in aa:
    b.append(a[1])
b
>> Result: ['aaa', 'bbb', 'ccc']

4 个答案:

答案 0 :(得分:3)

>>> aa = [["a", "aa", "aaa"],
          ["b", "bb", "bbb"],
          ["c", "cc", "ccc"]]
>>> b = zip(*aa)[2]
>>> print b
['aaa', 'bbb', 'ccc']

我很确定zip仍在遍历列表,但这是获得所需结果的更为简洁的方法。

请注意,在Python 3中,zip返回一个迭代器,因此您需要先转换为列表

list(zip(*aa))[2]

或使用列表理解

[i[2] for i in aa]

答案 1 :(得分:2)

这是列表推导的一种方式:

>>> aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
>>> b = [i[2] for i in aa]
>>> print b
['aaa', 'bbb', 'ccc']

答案 2 :(得分:1)

你可以使用列表理解:

b = [aa[i][2] for i in range(len(aa))] 

或者像搅拌机建议的那样更快更短

b = [a[2] for a in aa]

答案 3 :(得分:1)

您也可以使用Numpy:

>>> >>> a = numpy.array([
...     ["a", "aa", "aaa"],
...     ["b", "bb", "bbb"],
...     ["c", "cc", "ccc"],
... ])
>>> a[:,2]
    array(['aaa', 'bbb', 'ccc'], 
      dtype='|S3')