从其他列表的某些属性中创建一个列表

时间:2013-05-06 21:17:41

标签: python list

我有一个包含其他列表的列表,并希望仅从其他列表中的第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列表理解,它可以更顺利地完成。什么是列表理解?

3 个答案:

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