python - Cuenta los pares idénticos en dos listas
python-3.x (6)
En una sola línea:
sum(x == y for x, y in zip(a, b))
Mi lista tiene
a = [1,2,3,4,2,7,3,5,6,7]
b = [1,2,3,1,2,5,6,2,6,7]
Necesito contar si
a[i]==b[i]
.
Para el ejemplo anterior, la respuesta debería ser
6
La descripción detallada de la respuesta es
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)
Puede usar algunas de las características especiales de Python:
sum(i1 == i2 for i1, i2 in zip(a, b))
Esta voluntad
-
emparejar los elementos de la lista con
zip()
- usar una expresión generadora para iterar sobre los elementos emparejados
- expandir los pares de elementos en dos variables
-
compare las variables, lo que da como resultado un valor booleano que también se puede usar como
0
y1
-
suma los
1
s consum()
Un poco similar a la solución de @ yatu, pero
int.__eq__
una importación, uso
int.__eq__
:
print(sum(map(int.__eq__, a, b)))
Salida:
6
Una forma sería
map
ambas listas con
operator.eq
y tomar la
sum
del resultado:
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
Donde al mapear el operador
eq
obtenemos
True
o
False
dependiendo de si los elementos con el mismo índice son los mismos:
list(map(eq, a, b))
# [True, True, True, False, True, False, False, False, True, True]
Usando numpy:
import numpy as np
np.sum(np.array(a) == np.array(b))
Usando una expresión generadora, aproveche que
A == A
es igual a 1 y
A != A
es igual a cero.
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