Saltar al contenido

Python: ¿intersección de varias listas?

Solución:

set.intersection(*map(set,d))

para 2.4, simplemente puede definir una función de intersección.

def intersect(*d):
    sets = iter(map(set, d))
    result = sets.next()
    for s in sets:
        result = result.intersection(s)
    return result

para versiones más nuevas de python:

el método de intersección toma una cantidad arbitraria de argumentos

result = set(d[0]).intersection(*d[1:])

alternativamente, puede cruzar el primer conjunto consigo mismo para evitar cortar la lista y hacer una copia:

result = set(d[0]).intersection(*d)

No estoy realmente seguro de cuál sería más eficiente y tengo la sensación de que dependería del tamaño del d[0] y el tamaño de la lista a menos que Python tenga una verificación incorporada como

if s1 is s2:
    return s1

en el método de intersección.

>>> d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
>>> set(d[0]).intersection(*d)
set([3, 4])
>>> set(d[0]).intersection(*d[1:])
set([3, 4])
>>> 

@ usuario3917838

Agradable y simple, pero necesita un casting para que funcione y dar una lista como resultado. Debería verse así:

list(reduce(set.intersection, [set(item) for item in d ]))

dónde:

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

Y el resultado es:

[3, 4]

Al menos en Python 3.4

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *