2 回答
TA贡献1873条经验 获得超9个赞
我最初误解了这个问题。基本概念仍然成立。不要尝试更改您正在循环的列表。相反,制作一个副本以进行变异。然后遍历原始列表。你可以做任何你需要的比较。
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')]
添加回答
举报
