返回列表列表的子列表

时间:2013-10-06 21:41:50

标签: 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, 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+,会发生什么。你知道更快的方式吗?

4 个答案:

答案 0 :(得分:7)

嗯,你可以使用列表理解来做同样的事情,所以至少会缩短一点。

return [x[:5] for x in mylist]

或者,如果让您的函数成为生成器,您也可以生成单个元素:

for x in mylist:
    yield x[:5]

答案 1 :(得分:0)

实现它的另一种方法:

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

答案 2 :(得分:0)

如果你想让这个过程扩展,你应该也可以为内部列表使用生成器:

g = lambda k: (k[i] for i in range(5))
for x in mylist:
    yield g(x)

答案 3 :(得分:0)

功能性方法:

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