Czy jest tak, aby operacje krotek w Pythonie działały w ten sposób:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
zamiast:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Wiem, że to działa, ponieważ metody __add__
i __mul__
są tak zdefiniowane. Więc jedynym sposobem byłoby ich przedefiniowanie?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
byłoby odpowiednikiem rozumienia listy.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Korzystanie ze wszystkich wbudowanych ...
źródło
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
To rozwiązanie nie wymaga importu:
źródło
map(sum, zip(a, b))
)W pewnym sensie połączyliśmy dwie pierwsze odpowiedzi, z poprawką kodu ironfroggy, tak aby zwracała krotkę:
Uwaga: używanie
self.__class__
zamiast wstuple
celu ułatwienia tworzenia podklas.źródło
daje
array([4,4,4])
.Zobacz http://www.scipy.org/Tentative_NumPy_Tutorial
źródło
Zamiast mapy można użyć generatora. Wbudowana funkcja mapy nie jest przestarzała, ale jest mniej czytelna dla większości ludzi niż rozumienie listy / generatora / dyktowania, więc ogólnie nie zalecałbym używania funkcji mapy.
źródło
proste rozwiązanie bez definicji klasy, które zwraca krotkę
źródło
Wszystkie rozwiązania generatorów. Nie jestem pewien wydajności (chociaż itertools jest szybki)
źródło
Tak. Ale nie możesz przedefiniować wbudowanych typów. Musisz je podklasy:
źródło
jeszcze prostsze i bez użycia mapy, możesz to zrobić
źródło
Obecnie podklasuję klasę „krotki” do przeciążenia +, - i *. Uważam, że dzięki temu kod jest piękny, a jego pisanie jest łatwiejsze.
źródło
W przypadku, gdy ktoś potrzebuje uśrednić listę krotek:
źródło