返回列表中每个列表的元素范围
从一个列表 mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
中,我怎么才能得到一个新的列表,这个新列表里的每个子列表都只包含原来每个子列表的前两个元素,也就是 newlist = [[1, 2], [4, 5], [7, 8]]
?有没有一种简单的一行代码可以高效地做到这一点(特别是对于很大的列表)?
3 个回答
1
使用列表推导式。
newlist = [x[:2] for x in mylist]
3
快速回答:
first_two = [sublist[:2] for sublist in mylist]
如果你可以接受使用元组的列表,那么有一个更快的答案(根据我的测量,速度提升了2倍):
import operator
map(operator.itemgetter(0, 1), mylist)
测量结果:
t = timeit.Timer("[i[:2] for i in ll]", "ll = [[i, i + 1, i + 2] for i in xrange(1000)]")
t.timeit(10000)
>>> 2.2732808589935303
t2 = timeit.Timer("map(operator.itemgetter(0, 1), ll)", "import operator; ll = [[i, i + 1, i + 2] for i in xrange(1000)]")
t2.timeit(10000)
>>> 1.3041009902954102
7
最简单的方法可能就是用列表推导式:
newlist = [sublist[:2] for sublist in mylist]