[英]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.