Comparación de elementos comunes entre 2 listas.

Resuelto Daniel asked hace 14 años • 0 respuestas

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)
Daniel avatar May 19 '10 17:05 Daniel
Aceptado

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]
SilentGhost avatar May 19 '2010 11:05 SilentGhost

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 resultlista 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.

Tamás avatar May 19 '2010 11:05 Tamás

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))
BeyondRubicon avatar Jul 22 '2016 23:07 BeyondRubicon

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_elementsserá la matriz numpy: [3 5].

jrreda avatar May 20 '2020 21:05 jrreda

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.

YOU avatar May 19 '2010 11:05 YOU