提取每个子列表的第一项

2024-04-18 23:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道什么是提取列表列表中每个子列表的第一项并将其附加到新列表的最佳方法。如果我有:

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

我想找出a1x,并从中创建一个单独的列表。

我试过:

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

Tags: 方法in列表forappendlstlst2
3条回答

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

from operator import itemgetter

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

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

当您将它与map()结合使用时,这将非常有用,map()将函数作为第一个参数,将list(或任何其他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

你可以用拉链:

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

使用list comprehension

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

相关问题 更多 >