返回列表中每个列表的元素范围

1 投票
3 回答
6487 浏览
提问于 2025-04-16 06:17

从一个列表 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]

撰写回答