我需要從另一個具有 N=a*M 元素(a>=1)的串列生成 M 個串列,因此第 i 個磁區的第 n 個元素被添加到第 i 個新串列的第 n 個位置(i=1..M,所以原始串列被分成 N/M 長度的相等部分)。
用一個例子更容易理解:所以假設我有這個 list lg=[1,2,3,4,5,6,7,8,9],結果應該是l1=[1,4,7], l2=[2,5,8], l3=[3,6,9]
我用這段代碼做到了:
lg=[1,2,3,4,5,6,7,8,9] # N=9
M=3
lr=[[] for _ in range(M)]
print(lr) # [[], [], []]
idx_lr = 0
for idx,el in enumerate(lg): # the enumerate is not necessary, was for testing purposes
lr[idx_lr].append(el)
idx_lr = 1
if idx_lr == M:
idx_lr = 0
print(lr) #[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
它可以作業,但是,這是一個丑陋的代碼,有沒有辦法用一個行函式來做到這一點?
uj5u.com熱心網友回復:
您可以通過簡單的切片操作來做到這一點:
>>> lg=[1,2,3,4,5,6,7,8,9]
>>> [lg[i::3] for i in range(3)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
切片的第三部分是切片中每個元素之間的“步”;它默認為 1,但將其設定為M使其占用每個 Mth 元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528643.html
標籤:Python列表可迭代的
上一篇:如何將行檢索為串列而不是字串?
