list - python 提取每个子列表的第一项

在列表的列表中,我想知道提取每个子列表的第一项的最佳方法,并将它的附加到新列表中。 所以如果我有:


lst = [[a,b,c], [1,2,3], [x,y,z]]



我想提取 a1x,并创建一个单独的列表。

我试过:


lst2.append(x[0] for x in lst)



时间:

使用 list comprehension:


>>> lst = [['a','b','c'], [1,2,3], ['x','y','z']]


>>> lst2 = [item[0] for item in lst]


>>> lst2


['a', 1, 'x']



你可以使用 zip:


>>> lst=[[1,2,3],[11,12,13],[21,22,23]]


>>> zip(*lst)[0]


(1, 11, 21)



或 python 3,其中 zip 不生成列表:


>>> list(zip(*lst))[0]


(1, 11, 21)



或者


>>> next(zip(*lst))


(1, 11, 21)



或者,( 我最喜欢) 使用 numpy:


>>> import numpy as np


>>> a=np.array([[1,2,3],[11,12,13],[21,22,23]])


>>> a


array([[ 1, 2, 3],


 [11, 12, 13],


 [21, 22, 23]])


>>> a[:,0]


array([ 1, 11, 21])



python 包含一个名为itemgetter的函数,用于返回列表中特定索引处的项


from operator import itemgetter



将 itemgetter() 函数传递给要检索的项的索引。 要检索第一个条目,你可以使用 itemgetter(0) 。 要理解的重要一点是 itemgetter(0) 本身返回一个函数。 如果将列表传递给该函数,则会得到特定项:


itemgetter(0)([10, 20, 30]) # Returns 10



当你将它与 map ( ) 它将一个函数作为它的第一个参数和一个列表( 或任何其他 iterable ) 作为第二个参数组合时这非常有用 。 它返回在iterable中每个对象上调用函数的结果:


my_list = [['a', 'b', 'c'], [1, 2, 3], ['x', 'y', 'z']]


list(map(itemgetter(0), my_list)) # Returns ['a', 1, 'x']



注意 map() 返回一个生成器,因此将结果传递给 list() 以获取实际列表。 总之,你的任务可以像这样完成:


lst2.append(list(map(itemgetter(0), lst)))



这是使用列表推导的另一种方法,选择哪种方法高度依赖于上下文,可读性和首选项 。

更多信息:https://docs.python.org/3/library/operator.html#operator.itemgetter

...