0

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

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

4 回答 4

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]
于 2013-03-02T04:59:57.847 回答
2

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

>>> aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
>>> b = [i[2] for i in aa]
>>> print b
['aaa', 'bbb', 'ccc']
于 2013-03-02T04:59:35.233 回答
1

你可以使用列表理解:

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

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

b = [a[2] for a in aa]
于 2013-03-02T04:58:41.513 回答
1

你也可以用 Numpy 来做:

>>> >>> a = numpy.array([
...     ["a", "aa", "aaa"],
...     ["b", "bb", "bbb"],
...     ["c", "cc", "ccc"],
... ])
>>> a[:,2]
    array(['aaa', 'bbb', 'ccc'], 
      dtype='|S3')
于 2013-03-02T05:02:29.843 回答