简体   繁体   中英

Return sublists of List of lists

Well, I have this example:

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]]

It is a list of lists. I want to keep the first 5 points of each sublist. If it was a simple list I would called mylist[:5] and that's all. Now, the simpliest method I could imagine is to iterate through the mylist and copy the first 5 points of each sublist into a new list.

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

But what will happen if my list has length 10.000+. Do you know a faster way?

Well, you could do the same using list comprehension so at least it would get a bit shorter.

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

Or if making your function a generator instead, you could also yield the individual elements:

for x in mylist:
    yield x[:5]

实现它的另一种方法:

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

You should probably use generators for the inner lists as well, if you are trying to get the process to scale :

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

功能方法:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM