在python中提取每个子列表的第一项

我想知道什么是最好的方式来提取列表中的每个子列表的第一个项目,并将其附加到一个新的列表。 所以,如果我有:

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

我想拉出一个,1和X,并创build一个单独的列表。

我试过了:

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

使用列表理解 :

 >>> 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) 

或者,(我最喜欢的)使用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()和map(或任何其他迭代器)作为第二个参数时,这是很有用的。 它返回在迭代中的每个对象上调用函数的结果:

 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))) 

这是使用列表理解的另一种方法,select哪种方法高度依赖于上下文,可读性和偏好。

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

你的代码几乎是正确的。 唯一的问题是使用列表理解。

如果你使用像:(x [0] for x in),它返回一个生成器对象。 如果你使用像:[x [0] for x in],它返回一个列表。

当您将列表理解输出附加到列表中时,列表理解的输出是列表的单个元素。

 lst = [["a","b","c"], [1,2,3], ["x","y","z"]] lst2 = [] lst2.append([x[0] for x in lst]) print lst2[0] 

lst2 = [['a',1,'x']]

lst2 [0] = ['a',1,'x']

如果我不正确,请让我知道。

 lst = [['a','b','c'], [1,2,3], ['x','y','z']] outputlist = [] for values in lst: outputlist.append(values[0]) print(outputlist) 

输出: ['a', 1, 'x']

你说你有一个现有的名单。 所以我会去的。

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

现在你将生成器对象添加到第二个列表中。

 >>> lst2.append(item[0] for item in lst) >>> lst2 [1, 2, 3, <generator object <genexpr> at 0xb74b3554>] 

但是你可能希望它成为第一项的列表

 >>> lst2.append([item[0] for item in lst]) >>> lst2 [1, 2, 3, ['a', 1, 'x']] 

现在,我们将第一项的列表添加到现有的列表中。 如果你想添加项目自己,而不是他们的列表,现有的,你会使用list.extend。 在这种情况下,我们不必担心添加生成器,因为扩展将使用该生成器来添加它从中获取的每个项目,以扩展当前列表。

 >>> lst2.extend(item[0] for item in lst) >>> lst2 [1, 2, 3, 'a', 1, 'x'] 

要么

 >>> lst2 + [x[0] for x in lst] [1, 2, 3, 'a', 1, 'x'] >>> lst2 [1, 2, 3] 

https://docs.python.org/3.4/tutorial/datastructures.html#more-on-lists https://docs.python.org/3.4/tutorial/datastructures.html#list-comprehensions

没有太多的想法:

 lst = [['a','b','c'], [1,2,3], ['x','y','z']] lst2 = item[0]