Python 如何找出列表中的第一个重复编号?

Python 如何找出列表中的第一个重复编号?,python,duplicates,append,Python,Duplicates,Append,我需要找出列表中第一个重复的数字(第二次出现的索引必须是最小的)。这是我的密码: def firstDuplicate(a): b = [] for i in range(len(a)): for j in range(i+1, len(a)): if a[i] == a[j]: b.append(j) if len(b) == 0: r

我需要找出列表中第一个重复的数字(第二次出现的索引必须是最小的)。这是我的密码:

def firstDuplicate(a):
    b = []
    for i in range(len(a)):
        for j in range(i+1, len(a)):
            if a[i] == a[j]:
                b.append(j)
                if len(b) == 0:
                    return -1
                else:
                    return a[min(b)]
例如,如果我有a=[2,1,3,5,3,2],它应该返回3,但它返回2。 我用这个代码验证了:

a = [2, 1, 3, 5, 3, 2]

b = []
for i in range(len(a)):
    for j in range(i+1, len(a)):
        if a[i] == a[j]:
            b.append(j)
print(b)
结果得到了正确的答案,即[5,4]。 所以我不知道这里出了什么问题。有人能帮忙吗?谢谢

以下是截图:

每次满足条件
a[i]==a[j]
时,您都返回并停止循环。循环完成后返回:

def firstDuplicate(a):
    b = []
    for i in range(len(a)):
        for j in range(i+1, len(a)):
            if a[i] == a[j]:
                b.append(j)
    if len(b) == 0:
        return -1
    else:
        return a[min(b)]

print(firstDuplicate([2, 1, 3, 5, 3, 2]))
输出:


似乎您已经在for循环中写入了返回条件。所以它在第一次迭代时返回。试试这个

def firstDuplicate(a):
    b = []
    for i in range(len(a)):
        for j in range(i+1, len(a)):
            if a[i] == a[j]:
                b.append(j)
    if len(b) == 0:
        return -1
    else:
        return a[min(b)]

我认为我们可以通过数组的一次迭代来识别重复项

def first_duplicate(arr):
    d = dict()
    n = len(arr)
    for i, v in enumerate(arr):
        if v in d:
            d[v] = i
        else:
            d[v] = n

    # print(d)
    return min(d, key=d.get)


arr = [2, 1, 3, 5, 3, 2]
print(first_duplicate(arr))

您每次在第一次迭代时都返回,这与Appender无关,那么我应该怎么做?谢谢你,我明白了。非常感谢你!现在我明白了。谢谢您!
def first_duplicate(arr):
    d = dict()
    n = len(arr)
    for i, v in enumerate(arr):
        if v in d:
            d[v] = i
        else:
            d[v] = n

    # print(d)
    return min(d, key=d.get)


arr = [2, 1, 3, 5, 3, 2]
print(first_duplicate(arr))