2

我有一个包含其他列表的列表,并且想仅从其他列表中的第 n 个项目创建一个新列表。

my_list = [[1,2,3],['a','b','b'],[100,200,300]]

new_list = make_new_list(mylist, index=2)

new_list = [2,'b',200]

我知道如何设计一个获取所有第二个元素的函数,但我也知道总有一些 Pythonic 列表理解可以更顺利地完成此操作。什么是列表理解?

4

3 回答 3

5

这很容易:

new_list = [x[1] for x in my_list]

请注意,在 python 中,索引从 0 开始,因此第二个元素位于索引 1。

于 2013-05-06T21:18:27.073 回答
0

您可以使用列表推导来做到这一点,也可以使用 python 的 map 函数:

my_list = [[1,2,3],['a','b','b'],[100,200,300]]
newlist = map(lambda x: x[1], my_list)

如果你想要一个功能来做到这一点:

my_func = lambda li, index: map(lambda x: x[index], li)
newlist = my_func(my_list, 1)
于 2013-05-06T21:24:36.370 回答
0

除了使用 mgilson 建议的列表理解的版本之外,您还可以使用operator.itemgetter

>>> from operator import itemgetter
>>> map(itemgetter(1), my_list)
[2, 'b', 200]

一些时间比较:

>>> lis = [[1,2,3],['a','b','b'],[100,200,300]]*10**5

>>> %timeit [x[1] for x in lis]
10 loops, best of 3: 38.6 ms per loop

>>> %timeit map(itemgetter(1),lis)
10 loops, best of 3: 43.8 ms per loop

>>> %timeit map(lambda x: x[1], lis)
10 loops, best of 3: 82.9 ms per loop
于 2013-05-06T21:22:40.740 回答