簡體   English   中英

如何找出列表中第一個重復的數字?

[英]How to find out the first duplicated number in a list?

我需要找出列表中第一個重復的數字(第二次出現的索引必須是最小的)。 這是我的代碼:

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)]

例如,如果我有一個 = [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]))

出去:

3

您似乎在 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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM