我有一个包含其他列表的列表,并希望仅从其他列表中的第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列表理解,它可以更顺利地完成。什么是列表理解?
答案 0 :(得分:5)
这很简单:
new_list = [x[1] for x in my_list]
请注意,在python中,索引从0开始,因此第二个元素在索引1处。
答案 1 :(得分: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
答案 2 :(得分: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)