簡體   English   中英

返回列表列表的子列表

[英]Return sublists of List of lists

好吧,我有這個例子:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM