2016-07-27 3 views
2

Я пытаюсь сравнить кортеж. В результате я ожидал 2, но этот бит кода печатает 0. Почему?Сравнение Tuple с целыми числами

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

Ни один из тестов не будет проходить. Тип tuple никогда не будет равен int –

+2

'tup [0: 5]' является кортежем. Он никогда не будет равен целому числу. – user2357112

+1

, так что вы пытаетесь сделать пересечение двух кортежей и подсчитать, сколько общих значений? –

ответ

0

Ваш код не как вы сравниваете кортеж на целое число, даже если вы используете в как показано ниже вам будет по-прежнему необходимо использовать +=count + 1 не обновляет переменную Count:

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

Если вы хотите общую сумму от обоих общих элементов, вы можете использовать Счетчик 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)) 
+0

О, я вижу. Спасибо огромное! – MrMinehart

3

Вы можете делать то, что вы собираетесь с множественным пересечением:

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 

Вы, возможно, потребуется изменить порядок, в котором кортежи появляются в зависимости от того, какой из них имеет дубликат. Или если оба содержат обманки, вы можете сделать два прогона, сопоставляя оба кортежа и беря максимальное значение из обоих прогонов.

0

Вы сравниваете один фрагмент одного кортежа (например, tup1 [0: 5]) с одним элементом другого, который является целым числом. Поэтому результат сравнения всегда приведет к «ложному». Чтобы проверить, является ли элемент tup2 находится также в tup1, а также, вы можете использовать пересечение или следующее:

if tup2[n] in tup1: 
    ... 
Смежные вопросы