编程语言
首页 > 编程语言> > python-如何查找两个列表中存在但具有不同索引的元素

python-如何查找两个列表中存在但具有不同索引的元素

作者:互联网

我有两个长度相同的列表,其中包含各种不同的元素.我正在尝试比较它们,以找到两个列表中都存在但具有不同索引的元素数量.

这是一些示例输入/输出来说明我的意思:

>>> compare([1, 2, 3, 4], [4, 3, 2, 1])
4
>>> compare([1, 2, 3], [1, 2, 3])
0
# Each item in the first list has the same index in the other
>>> compare([1, 2, 4, 4], [1, 4, 4, 2])
2
# The 3rd '4' in both lists don't count, since they have the same indexes
>>> compare([1, 2, 3, 3], [5, 3, 5, 5])
1
# Duplicates don't count

列表大小始终相同.

这是我到目前为止的算法:

def compare(list1, list2):
    # Eliminate any direct matches
    list1 = [a for (a, b) in zip(list1, list2) if a != b]
    list2 = [b for (a, b) in zip(list1, list2) if a != b]

    out = 0
    for possible in list1:
        if possible in list2:
            index = list2.index(possible)
            del list2[index]
            out += 1
    return out

有没有更简洁,更有说服力的方式来做同样的事情?

解决方法:

此python函数确实适用于您提供的示例:

def compare(list1, list2):
    D = {e:i for i, e in enumerate(list1)}
    return len(set(e for i, e in enumerate(list2) if D.get(e) not in (None, i)))

标签:list,language-agnostic,python,algorithm
来源: https://codeday.me/bug/20191123/2066609.html