我基本上试图将多维列表中的一些数据提取到一个新列表中。虽然这段代码做了我想要的,但我想知道是否有更好的方法来获得这个结果而不循环原始列表?
aa = [
["a", "aa", "aaa"],
["b", "bb", "bbb"],
["c", "cc", "ccc"],
]
b = []
for a in aa:
b.append(a[1])
b
>> Result: ['aaa', 'bbb', 'ccc']
答案 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')