与整数的元组比较

时间:2016-07-27 22:09:39

标签: python integer comparison tuples

我正在尝试进行元组比较。我的结果是预期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)

3 个答案:

答案 0 :(得分:4)

你可以用集合交叉点做你想要的事情:

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

交集返回两个元组中的公共项:

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

您可能需要更改元组出现的顺序,具体取决于哪些元组具有副本。或者如果两者都包含dupes,你可以进行两次运行并置两个元组并从两次运行中获取最大值。

答案 1 :(得分:1)

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

#Program to practice While and Continue
While True:
    Print('Who are you?')
    name=input()

    If name!='Joe':
    continue
    print('Hello Joe! What is the password? (It is a fish)')
    password-input()
    If password=='swordfish'
    break
print('Access granted')

答案 2 :(得分:1)

您将代码与整数进行比较时代码失败,即使您使用如下所示,仍然需要使用+= 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))