在Python中,我曾经通过
获得二维列表的第一个元素a = [[0, 1], [2, 3]]
a[:][0]
# [0, 2]
现在,列表有点复杂,获取第一个元素的方法不起作用
a = [['sad', 1], ['dsads', 2]]
a[:][0]
# ['sad', 1]
我不知道这里有什么区别。以及如何以这种简单的方式获得第一个元素,而不是
[e[0] for e in a]
答案 0 :(得分:4)
您可以使用内置zip:
聚合每个迭代的元素
a = [['sad', 1], ['dsads', 2]]
zip(*a)[0]
#results :
('sad', 'dsads')
如有必要,您可以将最终结果转换为元组列表。
*
用于将列表展平为其元素 - zip接受iterables作为位置参数。 zip
是一种矩阵转置。
如评论所述,您的第一个解决方案(a[:][0]
)不正确,它只是采用列表的第一个元素。在这里,您需要首先转换列表,以便将每个第一个元素分组到单独的列表中,依此类推第二个,第三个元素。然后拿第一个元素。
<强>更新强>
来自@ Rawing的评论: 如果列表非常大,请考虑使用
next(itertools.izip(*a))
这是迭代器版本 - 只在必要时才使用list元素。在这种情况下,它一次构造一个结果的每个元素,因为我们需要第一个元素,我们一次使用next
来获取迭代器的下一个(因此,第一个)元素。
答案 1 :(得分:1)
使用numpy:
>>> a = [['sad', 1], ['dsads', 2]]
>>> import numpy
>>> my_array = numpy.array(a)
>>> print my_array[:,0]
['sad' 'dsads']