我有一個串列串列(我們稱之為 IDlist):我想要做的是洗掉 IDlist 的元素(串列),它們是 IDlist 的其他元素(其他串列)的“子字串”。
沒有必要使用串列,如果更簡單,Pandas 物件也很好。
我想出的唯一方法只是部分作業(僅在特定情況下),因此它們是無用的。我真的不知道如何使串列對“本身”起作用。
這是資料集的一部分。例如,第 61、62、63、64 行。61,62 和 64 是 63 的子串,所以我應該只保留第 63 行。
56 ['2588446634610274688', '2588446634612110336']
57 ['348020242217448576', '348020448377061376', '348020482735930112']
58 ['565983471644073472', '565989347158652288']
59 ['4912580642524184960', '4912898156569562624']
60 ['318121222523445376', '318121256883850112']
61 ['356731363606425856', '357478894075788928', '357479272034582528']
62 ['356731363606425856', '357478894075788928', '357479272034582528']
63 ['356731363606425856', '356731363608936576', '357478894075788928', '357479272034582528']
64 ['356731363606425856', '356731363608936576', '357478894075788928']
65 ['2512629230496996992', '2512629230497166848']
列印命令輸出:
>>> print(templist)
[['318121222523445376', '318121256883850112'], ['356731363606425856', '357478894075788928', '357479272034582528'], ['356731363606425856', '357478894075788928', '357479272034582528'], ['356731363606425856', '356731363608936576', '357478894075788928', '357479272034582528'], ['356731363606425856', '356731363608936576', '357478894075788928'], ['2512629230496996992', '2512629230497166848']]
uj5u.com熱心網友回復:
我找到的唯一解決方案是使用嵌套回圈遍歷 IDlist 并從 IDlist 的副本中彈出子集串列
IDlist = [['2588446634610274688', '2588446634612110336'],
['348020242217448576', '348020448377061376', '348020482735930112'],
['565983471644073472', '565989347158652288'],
['4912580642524184960', '4912898156569562624'],
['318121222523445376', '318121256883850112'],
['318121222523445376', '318121256883850112'],
['356731363606425856', '357478894075788928', '357479272034582528'],
['356731363606425856', '357478894075788928', '357479272034582528'],
['356731363606425856', '356731363608936576', '357478894075788928', '357479272034582528'],
['356731363606425856', '356731363608936576', '357478894075788928'],
['2512629230496996992', '2512629230497166848'], ]
def is_subset(a, b):
for i in a:
if i not in b:
return False
return True
new_IDlist = IDlist.copy()
for id_j, j in enumerate(IDlist):
for id_k, k in enumerate(IDlist):
if id_k == id_j:
continue
if len(k) < len(j):
if is_subset(k, j):
for _, l in enumerate(new_IDlist):
if k == l:
new_IDlist.pop(_)
break
else:
if is_subset(j, k):
cnt = 0
for _, l in enumerate(new_IDlist):
if k == l:
if cnt:
new_IDlist.pop(_)
else:
cnt = 1
輸出
['2588446634610274688', '2588446634612110336']
['348020242217448576', '348020448377061376', '348020482735930112']
['565983471644073472', '565989347158652288']
['4912580642524184960', '4912898156569562624']
['318121222523445376', '318121256883850112']
['356731363606425856', '356731363608936576', '357478894075788928', '357479272034582528']
['2512629230496996992', '2512629230497166848']
uj5u.com熱心網友回復:
您可以使用嵌套回圈檢查當前串列是否是所有其他串列的子集或超集。讓我們來看看:
def exclude_subsets(data):
cleaned_data = set(map(lambda x: tuple(sorted(x)), data))
superset_list = []
for k,i in enumerate(cleaned_data):
for l,j in enumerate(cleaned_data):
if k != l:
superset_list.append([k,l,set(i).issuperset(j)])
subset_ids = list(map(lambda x: x[1], filter(lambda x: x[2], superset_list)))
return [list(i) for k,i in enumerate(cleaned_data) if k not in subset_ids]
data = [['2588446634610274688', '2588446634612110336'],
['348020242217448576', '348020448377061376', '348020482735930112'],
['565983471644073472', '565989347158652288'],
['4912580642524184960', '4912898156569562624'],
['318121222523445376', '318121256883850112'],
['318121222523445376', '318121256883850112'],
['356731363606425856', '357478894075788928', '357479272034582528'],
['356731363606425856', '357478894075788928', '357479272034582528'],
['356731363606425856', '356731363608936576', '357478894075788928', '357479272034582528'],
['356731363606425856', '356731363608936576', '357478894075788928'],
['2512629230496996992', '2512629230497166848']]
print(exclude_subsets(data))
>>
[['565983471644073472', '565989347158652288'],
['4912580642524184960', '4912898156569562624'],
['356731363606425856','356731363608936576','357478894075788928','357479272034582528'],
['2588446634610274688', '2588446634612110336'],
['348020242217448576', '348020448377061376', '348020482735930112'],
['2512629230496996992', '2512629230497166848'],
['318121222523445376', '318121256883850112']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493740.html
