[英]How to Split Python list every Nth element
我想要做的很簡單,但我找不到如何去做。
從:
list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
到:
list1 = ['1', '5', '9']
list2 = ['2', '6', 'a']
list3 = ['3', '7', 'b']
list4 = ['4', '9']
換句話說,我需要知道如何:
具體的解決方案是使用跨步切片:
source = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
list1 = source[::4]
list2 = source[1::4]
list3 = source[2::4]
list4 = source[3::4]
source[::4]
從索引 0 開始,每 4 個元素取一個; 其他切片只改變起始索引。
通用的解決方案是使用循環進行切片,並將結果存儲在外部列表中; 列表理解可以很好地做到這一點:
def slice_per(source, step):
return [source[i::step] for i in range(step)]
演示:
>>> source = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
>>> source[::4]
['1', '5', '9']
>>> source[1::4]
['2', '6', 'a']
>>> def slice_per(source, step):
... return [source[i::step] for i in range(step)]
...
>>> slice_per(source, 4)
[['1', '5', '9'], ['2', '6', 'a'], ['3', '7', 'b'], ['4', '8']]
>>> slice_per(source, 3)
[['1', '4', '7', 'a'], ['2', '5', '8', 'b'], ['3', '6', '9']]
編號名稱是一個壞主意,你不應該命名你自己的變量list
(它隱藏了內置),但通常你可以這樣做:
>>> startlist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
>>> n = 4
>>> endlist = [[] for _ in range(n)]
>>> for index, item in enumerate(startlist):
endlist[index % n].append(item)
>>> endlist
[['1', '5', '9'], ['2', '6', 'a'], ['3', '7', 'b'], ['4', '8']]
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'] s = [] n = 3 for x in range(n): s.append(lst[x::n]) print(s)
替代方法:
list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b']
lists = []
list_temp = []
for _, __ in enumerate(list, 1):
list_temp.append(__)
if _ % 3 == 0 or _ == len(list):
lists.append(list_temp)
list_temp = []
這將在臨時列表中附加塊,並在每次索引除以所需列表長度沒有余數時將臨時列表附加到我們的最終列表中。
它更像是一種數學方法而不是 Pythonic 方法 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.