python python-3.x list

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 y 1
  • suma los 1 s con sum()

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