我有一个包含其他列表的列表,并且想仅从其他列表中的第 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 列表理解可以更顺利地完成此操作。什么是列表理解?
这很容易:
new_list = [x[1] for x in my_list]
请注意,在 python 中,索引从 0 开始,因此第二个元素位于索引 1。
您可以使用列表推导来做到这一点,也可以使用 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)
除了使用 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