我有一個列表如下;根據元素的位置從列表創建新的列表
['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
哪個是最有效的方式來創建3上面這樣的新列表?
['US', 'UK', 'Fra']
[20, 21, 23]
['en', 'en', 'fr']
我有一個列表如下;根據元素的位置從列表創建新的列表
['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
哪個是最有效的方式來創建3上面這樣的新列表?
['US', 'UK', 'Fra']
[20, 21, 23]
['en', 'en', 'fr']
在單(有趣)線:
>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
>>> lists = [[l[3*i+j] for i in range(0, int(len(l)/3))] for j in range(0, 3)]
>>> lists
[['US', 'UK', 'Fra'], [20, 21, 23], ['en', 'en', 'fr']]
你一定要採取lists[0]
,lists[1]
和lists[2]
。
您可以使用numpy
import numpy as np
DATA = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
x= np.array(DATA).reshape(3,len(DATA)/3).T.tolist()
print x[0]
print x[1]
print x[2]
它打印
['US', 'UK', 'Fra']
['20', '21', '23']
['en', 'en', 'fr']
這不是最有效的方式,但你可以用切片與步參數,實現使它非常易於理解:
>>> l = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
>>> l[::3]
['US', 'UK', 'Fra']
>>> l[1::3]
[20, 21, 23]
>>> l[2::3]
['en', 'en', 'fr']
切片和清單理解應該做的伎倆。它可能不是最有效的,但它簡潔易讀。
data = ['US', 20, 'en', 'UK', 21, 'en', 'Fra', 23, 'fr']
result = [ data[i::3] for i in range(3) ]
我沒有downvote,但問題很可能downvoted因爲它是一個虛擬複製 - 也就是說,它不會需要大量的搜索提供答案,而不是問這個問題的。 – aestrivex
Downvotes通常是缺乏研究的結果。你有沒有嘗試過自己,並確定它對你的需求來說太慢了? – chepner
我知道的唯一方法是運行循環並獲取新列表。我猜它是一個facepalm問題。但仍然... – richie