Comparación de elementos comunes entre 2 listas.
Dadas dos listas de entradas, ¿cómo puedo crear una lista de los elementos que son comunes a ambas entradas?
Por ejemplo: para entradas [1,2,3,4,5,6]
y [3,5,7,9]
, el resultado debería ser [3, 5]
; para entradas ['this','this','n','that']
y ['this','not','that','that']
, el resultado debería ser ['this', 'that']
.
Ver también:
- En Python, ¿cómo encuentro palabras comunes de dos listas manteniendo el orden de las palabras? (para mantener el orden)
- Python: ¿intersección de múltiples listas? (para calcular la intersección entre >= 3 listas)
- ¿Intersección de dos listas que incluyen duplicados? (para mantener los elementos duplicados)
Utilice la intersección establecida de Python :
>>> list1 = [1,2,3,4,5,6]
>>> list2 = [3, 5, 7, 9]
>>> list(set(list1).intersection(list2))
[3, 5]
Las soluciones sugeridas por S.Mark y SilentGhost generalmente le indican cómo se debe hacer en forma Pythonic, pero pensé que también podría beneficiarse al saber por qué su solución no funciona. El problema es que tan pronto como encuentre el primer elemento común en las dos listas, devolverá solo ese elemento. Su solución podría solucionarse creando una result
lista y recopilando los elementos comunes en esa lista:
def common_elements(list1, list2):
result = []
for element in list1:
if element in list2:
result.append(element)
return result
Una versión aún más corta que utiliza listas por comprensión:
def common_elements(list1, list2):
return [element for element in list1 if element in list2]
Sin embargo, como dije, esta es una forma muy ineficiente de hacer esto: los tipos de conjuntos integrados de Python son mucho más eficientes ya que se implementan en C internamente.
También puedes usar conjuntos y obtener los puntos en común en una línea: resta el conjunto que contiene las diferencias de uno de los conjuntos.
A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
Puedes resolver esto usando numpy
:
import numpy as np
list1 = [1, 2, 3, 4, 5, 6]
list2 = [3, 5, 7, 9]
common_elements = np.intersect1d(list1, list2)
print(common_elements)
common_elements
será la matriz numpy: [3 5]
.
utilizar establecer intersecciones, establecer (lista1) y establecer (lista2)
>>> def common_elements(list1, list2):
... return list(set(list1) & set(list2))
...
>>>
>>> common_elements([1,2,3,4,5,6], [3,5,7,9])
[3, 5]
>>>
>>> common_elements(['this','this','n','that'],['this','not','that','that'])
['this', 'that']
>>>
>>>
Tenga en cuenta que la lista de resultados podría tener un orden diferente al de la lista original.