Подсчитайте одинаковые пары в двух списках

Мой список

a = [1,2,3,4,2,7,3,5,6,7]
b = [1,2,3,1,2,5,6,2,6,7]

Мне нужно посчитать, если a[i]==b[i].

Для приведенного выше примера ответ должен быть

6

Подробное описание ответа

a[0]==b[0] (1==1)
a[1]==b[1] (2==2)
a[2]==b[0] (3==3)
a[4]==b[4] (2==2)
a[8]==b[8] (6==6)
a[9]==b[9] (7==7)

Ответ 1

В однострочнике:

sum(x == y for x, y in zip(a, b))

Ответ 2

Одним из способов было бы map оба списка с помощью operator.eq и взять sum результата:

from operator import eq

a = [1,2,3,4,2,7,3,5,6,7]
b = [1,2,3,1,2,5,6,2,6,7]

sum(map(eq, a, b))
# 6

Где, сопоставляя оператор eq мы получаем либо True либо False зависимости от того, совпадают ли элементы с одинаковым индексом:

list(map(eq, a, b))
# [True, True, True, False, True, False, False, False, True, True]

Ответ 3

Вы можете использовать некоторые специальные функции Python:

sum(i1 == i2 for i1, i2 in zip(a, b))

Это будет

  • Сопоставить элементы списка с zip()
  • использовать выражение генератора для перебора парных элементов
  • Разбейте пары предметов на две переменные
  • сравнить переменные, что приводит к логическому значению, которое также можно использовать как 0 и 1
  • сложить 1 с sum()

Ответ 4

Используя выражение генератора, используйте A == A, равное 1, и A != A, равное нулю.

a = [1,2,3,4,2,7,3,5,6,7]
b = [1,2,3,1,2,5,6,2,6,7]
count = sum(a[i] == b[i] for i in range(len(a)))
print(count)

6

Ответ 5

Используя NumPy:

import numpy as np
np.sum(np.array(a) == np.array(b))

Ответ 6

Немного похоже на решение @yatu, но я сохраняю импорт, я использую int.__eq__:

print(sum(map(int.__eq__, a, b)))

Выход:

6

Ответ 7

Попробуй это:

sum([1 if len(_)==1 else 0 for _ in list(map(set, list(zip(a, b))))])

Ответ 8

Вы можете сделать это просто, принимая общие элементы между списками ниже. Посмотрите ниже:

а = [1,2,3,4,2,7,3,5,6,7]

b = [1,2,3,1,2,5,6,2,6,7]

общие_данные = список (набор (а) и набор (б))

печать (len (common_data))