Apakah ada cara untuk membuat operasi tupel dengan Python bekerja seperti ini:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
dari pada:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Saya tahu ini berfungsi seperti itu karena __add__
dan __mul__
metode didefinisikan untuk bekerja seperti itu. Jadi satu-satunya cara adalah dengan mendefinisikannya kembali?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
akan menjadi setara dengan pemahaman daftar.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Menggunakan semua bawaan ..
sumber
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Solusi ini tidak memerlukan impor:
sumber
map(sum, zip(a, b))
)Urutkan gabungan dua jawaban pertama, dengan tweak ke kode ironfroggy sehingga mengembalikan tupel:
Catatan: menggunakan
self.__class__
bukannyastuple
memudahkan subclassing.sumber
memberi
array([4,4,4])
.Lihat http://www.scipy.org/Tentative_NumPy_Tutorial
sumber
Pemahaman generator dapat digunakan sebagai pengganti peta. Fungsi peta bawaan tidak usang tetapi kurang dapat dibaca oleh kebanyakan orang daripada pemahaman daftar / generator / dikt, jadi saya merekomendasikan untuk tidak menggunakan fungsi peta secara umum.
sumber
solusi sederhana tanpa definisi kelas yang mengembalikan tupel
sumber
Semua solusi generator. Tidak yakin dengan kinerja (itertools cepat, meskipun)
sumber
Iya. Tapi Anda tidak bisa mendefinisikan ulang tipe bawaan. Anda harus membuat subkelasnya:
sumber
lebih sederhana dan tanpa menggunakan peta, Anda dapat melakukannya
sumber
Saat ini saya membuat subkelas kelas "tuple" untuk membebani +, - dan *. Saya merasa itu membuat kode menjadi indah dan menulis kode lebih mudah.
sumber
Jika seseorang perlu membuat daftar rata-rata tupel:
sumber