如何在Python中获取复杂列表的第一个元素

时间:2016-07-19 06:28:47

标签: python python-2.7

在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]

2 个答案:

答案 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']