[英]Grouping lists of numbers together in Python
我有以下內容,這是Python中列表的列表,並且是我擁有的部分值列表:
[1,33]
[2,10,42]
[5,1,33,44]
[10,42,98]
[44,12,100,124]
有沒有一種將它們分組的方法,以便它們收集每個列表中共有的值?
例如,如果我查看第一個列表[1,33],則可以看到該值存在於第三個列表中:[5,1,33,44]
因此,這些被分組為
[5,1,33,44]
如果繼續看下去,我可以看到最終列表中有44個,因此它將與該列表一起分組。
將[44,12,100,124]添加到[5,1,33,44]
給出:[1,5,12,33,44,100,124]
第二個列表[2,10,42]與[10,42,98]具有共同的值,因此將它們連接在一起可得出:[2,10,42,98]
因此,最終列表為:
[1,5,12,33,44,100,124]
[2,10,42,98]
我猜這種類型的分組有一個特定的名稱。 是否有可以自動處理的庫? 還是我必須編寫手動搜索方式?
我希望所做的編輯可以使我更清楚地了解要實現的目標。
謝謝。
這是一個不需要標准庫或3rd party軟件包的解決方案。 請注意,這會改變a
。 為避免這種情況,只需復制a
並對其進行處理。 結果是一個列表列表,其中包含您得到的排序列表。
a = [
[1,33],
[2,10,42],
[5,1,33,44],
[10,42,98],
[44,12,100,124]
]
res = []
while a:
el = a.pop(0)
res.append(el)
for sublist in a:
if set(el).intersection(set(sublist)):
res[-1].extend(sublist)
a.remove(sublist)
res = [sorted(set(i)) for i in res]
print(res)
# [[1, 5, 12, 33, 44, 100, 124], [2, 10, 42, 98]]
工作原理:
res
。 從分組a
將被“轉移”在這里。 .pop()
關閉的第一個元素a
。 這將修改a
就位並將el
定義為該元素。 a
,你的突然出現比較el
那些子列表和“建立”公共集。 這是您的問題有點棘手的地方,因為您需要逐漸增加相交的集合,而不是一次找到多個子列表的交集。 a
為空。 另外,如果您只想將偶數和奇數子列表組合在一起(您的問題仍然不清楚),則可以使用itertools:
from itertools import chain
grp1 = sorted(set(chain.from_iterable(a[::2])))
grp2 = sorted(set(chain.from_iterable(a[1::2])))
print(grp1)
print(grp2)
# [1, 5, 12, 33, 44, 100, 124]
# [2, 10, 42, 98]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.