Python 返回列表列表的子列表

Python 返回列表列表的子列表,python,Python,我举了一个例子: mylist = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4,

我举了一个例子:

mylist = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
这是一个列表列表。我想保留每个子列表的前5个点。如果它是一个简单的列表,我会称之为mylist[:5],仅此而已。现在,我能想到的最简单的方法是迭代mylist,并将每个子列表的前5个点复制到一个新列表中

newlist = []
for i in mylist:
    newlist.append(i[:5])

但如果我的列表长度为10.000+,会发生什么。你知道一个更快的方法吗?

好吧,你可以用列表理解来做同样的事情,这样至少它会变短一点

return [x[:5] for x in mylist]
或者,如果将函数改为生成器,也可以生成单个元素:

for x in mylist:
    yield x[:5]

另一种实现方法:

return map(lambda lst: lst[:5], mylist)

如果您试图让流程按比例扩展,您可能也应该为内部列表使用生成器:

g = lambda k: (k[i] for i in range(5))
for x in mylist:
    yield g(x)
功能性方法:

map(operator.itemgetter(slice(0, 5)), mylist)

要处理所有列表,您必须。。。至少处理一次所有列表。因此,没有比线性
O(n)
复杂度更快的方法了。如果您不需要一次获得所有结果,您可以编写一个函数按需获取特定的子列表。我的理解是,列表理解比传统的python循环更有效,因此它不仅使代码更短,而且应该执行得更快。