Gibt es überhaupt eine Möglichkeit, Tupeloperationen in Python so auszuführen?
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
anstatt:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Ich weiß, dass es so funktioniert, weil die __add__
und __mul__
Methoden so definiert sind. Der einzige Weg wäre also, sie neu zu definieren?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
wäre das Äquivalent als Listenverständnis.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Mit allen eingebauten ..
quelle
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Diese Lösung erfordert keinen Import:
quelle
map(sum, zip(a, b))
)Kombiniert die ersten beiden Antworten mit einer Optimierung des Codes von ironfroggy, sodass ein Tupel zurückgegeben wird:
Hinweis: Verwenden von
self.__class__
anstelle vonstuple
, um die Unterklasse zu vereinfachen.quelle
gibt
array([4,4,4])
.Siehe http://www.scipy.org/Tentative_NumPy_Tutorial
quelle
Das Generatorverständnis könnte anstelle der Karte verwendet werden. Die integrierte Kartenfunktion ist nicht veraltet, aber für die meisten Menschen weniger lesbar als das Verständnis von Listen / Generatoren / Diktaten. Daher würde ich empfehlen, die Kartenfunktion im Allgemeinen nicht zu verwenden.
quelle
einfache Lösung ohne Klassendefinition, die Tupel zurückgibt
quelle
Alle Generatorlösung. Ich bin mir nicht sicher über die Leistung (itertools ist jedoch schnell)
quelle
Ja. Sie können integrierte Typen jedoch nicht neu definieren. Sie müssen sie unterordnen:
quelle
Noch einfacher und ohne Verwendung der Karte können Sie dies tun
quelle
Ich klassifiziere derzeit die "Tupel" -Klasse, um +, - und * zu überladen. Ich finde, es macht den Code schön und das Schreiben des Codes einfacher.
quelle
Für den Fall, dass jemand eine Liste von Tupeln mitteln muss:
quelle