元组与整数的比较

Tuple Comparison with Integers

我正在尝试进行元组比较。我预计结果是 2,但这段代码打印出 0。为什么?

tup1 = (1, 2, 3, 4, 5)
tup2 = (2, 7, 9, 8, 5)
count = 0

if tup1[0:5] == tup2[0]:
    count + 1
elif tup1[0:5] == tup2[1]:
    count + 1
elif tup1[0:5] == tup2[2]:
    count + 1
elif tup1[0:5] == tup2[3]:
    count + 1
elif tup1[0:5] == tup2[4]:
    count + 1
print(count)

你可以用一组交叉点做你想做的事:

len(set(tup1) & set(tup2))

交集returns两个元组中的共同项:

>>> set(tup1) & set(tup2)
{2, 5}

对交集的结果调用 len 给出两个元组中共同项的数量。

但是,如果任何元组中存在重复的项目,则以上将不会给出正确的结果。你将需要做,比如理解,来处理这个:

sum(1 for i in tup1 if i in tup2) # adds one if item in tup1 is found in tup2

您可能需要更改元组出现的顺序,具体取决于其中哪些元组具有重复项。或者,如果两者都包含重复项,则可以将两个元组并列运行两次,并从两次运行中取最大值。

您正在将一个元组的一个切片(例如 tup1[0:5])与另一个恰好是整数的元素进行比较。因此,比较的结果总是"False"。 要检查 tup2 的元素是否也位于 tup1 中,您可以使用交集或以下内容:

if tup2[n] in tup1:
   ...

您的代码失败,因为您正在将元组与整数进行比较,即使您使用 in 如下,您仍然需要使用 += count + 1 不更新计数变量:

count = 0

for ele in tup2:
    if ele in tup1:
        count += 1

您可以在线性时间内完成并考虑 tup2 中重复出现的情况,仅设置 tup1:

st = set(tup1)
print(sum(ele in st for ele in tup2))

如果你想要两个共同元素的总和,你可以使用 Counter dict:

tup1 = (1, 2, 3, 4, 5, 4, 2)
tup2 = (2, 7, 9, 8, 2, 5)
from collections import Counter

cn = Counter(tup1)

print(sum(cn[i] for i in tup2))