0
    for x in check:
        this = sorted(x) #the first tuple
        for y in check:
            that = sorted(y) #the other tuples in the list? in order to compare with 'this'.
            if this == that:
                check.remove(x) 

    print(check)

我基本上想检查每个列表(在列表“检查”中)是否存在相同的元组,例如 (1, 3) 和 (3, 1)。然后我想从列表“检查”中删除最后一个((3,1))。但是,当我使用“check.remove(x)”时,该函数返回“list.remove(x): x not in list”错误。当我使用“check.remove(y)”时,结果是:

“check.remove(y)”的输出

我注意到第一个元组(具有相同值的元组)被删除了,并且在倒数第二个列表中,仍然有一对具有相同值的元组。

列表“检查”的样子

如何比较同一列表中的元组并删除包含相同值的第二个?

4

3 回答 3

2

从列表中重复删除从来都不是一个好主意,因为它是O(N). 但是,您可以在一个非嵌套运行中进行清理。最好从头开始构建一个干净的列表,并可能将其重新分配给同一个变量:

seen, no_dupes = set(), []
for c in check:
    s = tuple(sorted(c))
    if s not in seen:
         seen.add(s)
         no_dupes.append(c)
# check[:] = no_dupes  # if you must
于 2017-11-15T20:45:09.183 回答
0

考虑实例[(1,1), (1,1), (1,1)] 在第一次迭代中,x被分配给列表中y的第一个元素,也被分配给第一个元素,因为x=y,remove x。现在 wheny迭代到第二个元素 ,x=y但现在x已经在上一次迭代中被删除。您应该使用动态编程:

new_check = []
for x in check:
   this = sorted(x)
   if x not in new_check:
      new_check.append(x)
return new_check
于 2017-11-15T20:48:44.280 回答
0

使用in与不使用==

for x in check:
    this = sorted(x) #the first tuple
    for y in check:
        that = sorted(y) #the other tuples in the list? in order to compare with 'this'.
        if this in that:
            check.remove(x) 
     # alternatively you might need to loop through this if its a tuple of tuples
     # for t in this:
     #     if t in that:
     #         check.remove(x)

print(check)
于 2017-11-15T20:38:05.160 回答