2 回答

TA貢獻1873條經驗 獲得超9個贊
我最初誤解了這個問題?;靖拍钊匀怀闪ⅰ2灰獓L試更改您正在循環的列表。相反,制作一個副本以進行變異。然后遍歷原始列表。你可以做任何你需要的比較。
def remove_symetric(A):
B = A
for (a, b, c) in A:
if (c,b,a) in B:
B.remove((c,b,a))
return B
A = [(0, 1, 3), (0, 1, 3), (0, 2, 3), (0, 1, 4), (5, 1, 3), (0, 7, 3), (0, 7, 3),(3, 1, 0)]
A=remove_symetric(A)
print("Non-duplicate items:")
print(A)
輸出:
Non-duplicate items:
[(0, 1, 3), (0, 1, 3), (0, 2, 3), (0, 1, 4), (5, 1, 3), (0, 7, 3), (0, 7, 3)]
原答案:
而不是刪除重復項。如果尚未添加,請嘗試添加到空白列表。像這樣的東西:
def return_unique(A):
B = []
for x in A:
if x not in B:
B.append(x)
return B
像這樣測試:
A = [(0, 1, 3), (0, 1, 3), (0, 2, 3), (0, 1, 4), (5, 1, 3), (0, 7, 3), (0, 7, 3)]
B = return_unique(A)
print('Non-duplicate items:')
print(B)
Non-duplicate items:
[(0, 1, 3), (0, 2, 3), (0, 1, 4), (5, 1, 3), (0, 7, 3)]

TA貢獻1803條經驗 獲得超3個贊
您可以對列表中的每個元組進行排序并將最終輸出傳遞到集合中將刪除重復項
>>> data = [(0,1,7), (5,1,3), (7,1,0), (0,7,1)] # sample input
>>> data = list(set(map(lambda x: tuple(sorted(x)), data)))
[(1, 3, 5), (0, 1, 7)]
注意:上述解決方案僅在您tuple必須具有唯一的type object. 如果您的元組包含不同type對象的混合,那么您需要將其中的所有元素轉換tuple為string類型并將其傳遞給sorted方法。
>>> data = [(0, 1, 7, 'b'), (5, 1, 3, 'a'), (7, 1, 0, 'b'), (0, 1, 7, 'b')]
>>> list(set(map(lambda x: tuple(sorted(map(str, x))), data)))
[('1', '3', '5', 'a'), ('0', '1', '7', 'b')]
添加回答
舉報