通过比较 i 和 i+1 在排序列表中查找重复项

find duplicates in a sorted list by comparing i with i+1

我有一个按升序排列的列表。我想通过比较元素 i 和元素 i+1 来查找列表中的重复项。我已经尝试了其他 worked.For 示例双循环的方法,但我想使用这种方法,因为我正在学习 python 并且想了解为什么我的代码不起作用。 这是我的代码:

array=[1,1,2,3,3,4,5,6]
def find_duplicates(arr):
  duplicates=[]
  sorted=  sort(arr) #helper function that succesfully sorts a list
  
  for i in range(1, len(sorted)):
      #before=sorted[i-1]
      if i==sorted[i-1]:
          duplicates.append(i) #tried also duplicates.append(sorted[i-1])

  return duplicates #expected: [1,3] 


print(find_duplicates(array)) #actual outcome [1]

我只是将第一个副本附加到我的数组中。 您的建议将不胜感激。 谢谢。

您正在比较 isorted[i-1],而不是比较 sorted[i].

的列表元素

此外,sorted 是 python 中的关键字,因为有一个函数同名 - sorted() 所以最好使用另一个变量。

有几次修复机会。首先,我们不要使用 sorted 作为变量名 :-) 接下来,让我们理清混乱的索引到 arrarr 在该索引处的值。

def find_duplicates(arr):
    ## ---------------------
    ## feel free to call some other sorting function, but let's not set the return
    ## value to a variable called "sorted" as it clobers this built-in function
    ## ---------------------
    arr = sorted(arr)
    ## ---------------------

    duplicates=[]
    for i in range(1, len(arr)):
        ## ---------------------
        ## Not stricktly needed, but let's define some variables for clarity
        ## ---------------------
        current_value = arr[i]
        prior_value = arr[i - 1]
        ## ---------------------

        if current_value == prior_value:
            duplicates.append(prior_value)

    return duplicates

array=[1,1,2,3,3,4,5,6]
print(find_duplicates(array))

这应该给我们:

[1, 3]