[英](Python 3) Splitting a list using unique elements as separators
我有一個列表l=[2,3,4,5,6,99,7,8,9,10,11,12,100,13,14,15,16,17,18,101]
我想分裂l
進入子列表[2,3,4,5,6], [7,8,9,10,11,12],[13,14,15,16,17,18]
,意思是我使用'分隔符'數字99,100,101屬於separators = [99,100,101]
作為標志,表示我應該進入下一個列表。
特別地,這些子列表可能不具有相同數量的元素,但是僅在1(5或6)的大小上不同。 注意:可能有超過3個分隔符。
有沒有一種有效的方法在Python 3中執行此操作? 我想到首先提取分隔符元素的索引,然后相應地切片列表,但它似乎太復雜和計算密集..
一些見解會很棒!
加上(來自@Netwave的建議):我的嘗試(顯然不起作用):
g = []
for i in l:
if i in separators:
g += [l[:l.index(i)]]
輸出:
>>> g
[[2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 99, 7, 8, 9, 10, 11, 12], [2, 3, 4, 5, 6, 99, 7, 8, 9, 10, 11, 12, 100, 13, 14, 15, 16, 17, 18]]
使用groupby :
from itertools import groupby
separators = [99, 100, 101]
l = [2, 3, 4, 5, 6, 99, 7, 8, 9, 10, 11, 12, 100, 13, 14, 15, 16, 17, 18, 101]
splits = [list(values) for key, values in groupby(l, key=lambda x: x not in separators) if key]
print(splits)
產量
[[2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]
我希望你正在尋找類似於下面的代碼。 您需要迭代列表並繼續檢查元素是否存在於分隔符列表中。 這可以通過其他方式完成,正如您所說,迭代分隔符列表並查找主列表中元素的索引。 為了簡單起見,我采用了前一種方法。 (記下endindex變量的使用):
l=[2,3,4,5,6,99,7,8,9,10,11,12,100,13,14,15,16,17,18,101]
seperator = [99,100,101]
list_of_list = []
endindex = 0
for i in range(0,len(l),1):
if l[i] in seperator:
list_of_list.append(l[endindex:i])
endindex = i + 1
print(list_of_list)
輸出繼電器:
[[2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]
更容易在功能中使用:
import itertools
def split(l,l2):
return [list(v) for k,v in itertools.groupby(l,lambda x: x in l2) if not k]
l = [2, 3, 4, 5, 6, 99, 7, 8, 9, 10, 11, 12, 100, 13, 14, 15, 16, 17, 18, 101]
print(split(l,[99, 100, 101]))
輸出:
[[2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18]]
實現了將列表拆分為值的嵌套列表的副本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.