我不知道为什么只有三分之二的值显示它们在我的代码中是相同的,是不是我遗漏了什么?

def occurInBoth(B,A):
    occured = 0
    for i in range(len(A)):
        if A[i] == B[i]:
            occured += 1

    return occured



A = [5,12,31,7,25]
sorted(A)
A.sort()
print(A)
B = [4,12,7,31,42,8]
sorted(B)
B.sort()
print(B)
occured = occurInBoth(B,A)
print(occured)

你能告诉我吗?

最佳答案

你的算法有逻辑错误。如果对两个列表进行排序,并不意味着这些项将出现在同一索引中。
实际上,以您的示例中的排序列表为例:

A = [5, 7, 12, 25, 31]
B = [4, 7,  8, 12, 31, 42]

可以看到12出现在两个列表中,但不在同一索引中。
但是,您可以利用列表已排序的事实:
def occurInBoth(a, b):
    occured = i = j = 0
    while i < len(a) and j < len(b):
        if a[i] < b[j]:
            i += 1
        elif a[i] > b[j]:
            j += 1
        else:
            occurred += 1
            i += 1
            j += 1

关于python - 对两个数组进行排序以查看它们是否具有相同的值,但是只会发现数组中有2/3个相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58259761/

10-09 05:27