Si usted no tiene Python 2.6 o superior, la alternativa es escribir un bucle explícito para:
def set_list_intersection(set_list):
if not set_list:
return set()
result = set_list[0]
for s in set_list[1:]:
result &= s
return result
set_list = [set([1, 2]), set([1, 3]), set([1, 4])]
print set_list_intersection(set_list)
# Output: set([1])
También puede utilizar reduce
:
set_list = [set([1, 2]), set([1, 3]), set([1, 4])]
print reduce(lambda s1, s2: s1 & s2, set_list)
# Output: set([1])
Sin embargo, muchos programadores de Python no me gusta, including Guido himself:
Hace alrededor de 12 años, Python adquirió lambda, reduce(), fil ter() y map(), cortesía de (creo) un hacker Lisp que los echó de menos y envió parches de trabajo. Pero, a pesar del valor PR, creo que estas características deberían cortarse de Python 3000.
Así que ahora reduce(). Esto es realmente el que siempre he odiado, porque, aparte de algunos ejemplos que involucran + o *, casi cada vez que veo una llamada de reducción() con un argumento de función no trivial, necesito agarrar lápiz y papel para Diagrama lo que se está alimentando en esa función antes de entender qué se supone que debe hacer el reducir(). Así que, en mi opinión, la aplicabilidad de reduce() se limita bastante a los operadores asociativos, y en todos los demás casos es mejor escribir explícitamente el ciclo de acumulación.
¿Puede explicarme o señalarme la documentación relevante para lo que significa '* setlist' aquí? (Específicamente, ¿qué hace el asterisco?) ¡Gracias! – PurpleVermont
Para cualquier otra persona que pueda tener la misma pregunta que yo, encontré la respuesta aquí: http://stackoverflow.com/questions/400739/what-does-asterisk-mean-in-python – PurpleVermont