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