Jika Anda tidak memiliki Python 2.6 atau lebih tinggi, alternatifnya adalah menulis eksplisit untuk loop:
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])
Anda juga dapat menggunakan reduce
:
set_list = [set([1, 2]), set([1, 3]), set([1, 4])]
print reduce(lambda s1, s2: s1 & s2, set_list)
# Output: set([1])
Namun, banyak programmer Python tidak menyukainya, termasuk Guido sendiri :
Sekitar 12 tahun yang lalu, Python mendapatkan lambda, mengurangi (), filter () dan peta (), milik (saya percaya) seorang hacker Lisp yang merindukan mereka dan mengirimkan patch yang berfungsi. Namun, terlepas dari nilai PR, saya pikir fitur ini harus dipotong dari Python 3000.
Jadi sekarang kurangi (). Ini sebenarnya yang paling saya benci, karena, terlepas dari beberapa contoh yang melibatkan + atau *, hampir setiap kali saya melihat panggilan pengurangan () dengan argumen fungsi non-sepele, saya perlu mengambil pena dan kertas untuk diagram apa yang sebenarnya dimasukkan ke dalam fungsi itu sebelum saya mengerti apa yang seharusnya dilakukan pengurangan (). Jadi dalam pikiran saya, penerapan pengurangan () cukup banyak terbatas pada operator asosiatif, dan dalam semua kasus lainnya lebih baik untuk menuliskan lingkaran akumulasi secara eksplisit.
reduce
"terbatas pada operator asosiatif", yang berlaku dalam kasus ini.reduce
sangat sering sulit untuk diketahui, tetapi&
tidak terlalu buruk.