我基本上是在尝试从多维列表中提取一些数据到一个新列表中。虽然这段代码做了我想要的,但我想知道是否有更好的方法来获得这个结果而不循环原始列表?
aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
b = []
for a in aa:
b.append(a[1])
b
>> Result: ['aaa', 'bbb', 'ccc']
我基本上是在尝试从多维列表中提取一些数据到一个新列表中。虽然这段代码做了我想要的,但我想知道是否有更好的方法来获得这个结果而不循环原始列表?
aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
b = []
for a in aa:
b.append(a[1])
b
>> Result: ['aaa', 'bbb', 'ccc']
>>> 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]
这是列表推导的一种方式:
>>> aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
>>> b = [i[2] for i in aa]
>>> print b
['aaa', 'bbb', 'ccc']
你可以使用列表理解:
b = [aa[i][2] for i in range(len(aa))]
或者像搅拌机建议的那样更快更短
b = [a[2] for a in aa]
你也可以用 Numpy 来做:
>>> >>> a = numpy.array([
... ["a", "aa", "aaa"],
... ["b", "bb", "bbb"],
... ["c", "cc", "ccc"],
... ])
>>> a[:,2]
array(['aaa', 'bbb', 'ccc'],
dtype='|S3')