Есть ли способ заставить операции с кортежами в Python работать следующим образом:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(4,4,4)
вместо того:
>>> a = (1,2,3)
>>> b = (3,2,1)
>>> a + b
(1,2,3,3,2,1)
Я знаю , что это работает , как , что , так как __add__
и __mul__
методы определяются для работы , как это. Значит, единственный способ - переопределить их?
map(operator.add, (1,2), ("3", "4"))
tuple([item1 + item2 for item1, item2 in zip(a, b)])
будет эквивалентом понимания списка.tuple(item1 + item2 for item1, item2 in zip(a, b))
.Использование всех встроенных модулей ..
источник
tuple(map(sum,zip(a,b))
tuple(map(sum,zip(a,b, c))
Это решение не требует импорта:
источник
map(sum, zip(a, b))
)Как бы объединил первые два ответа с изменением кода ironfroggy, чтобы он возвращал кортеж:
Примечание: используйте
self.__class__
вместо,stuple
чтобы облегчить создание подклассов.источник
дает
array([4,4,4])
.См. Http://www.scipy.org/Tentative_NumPy_Tutorial
источник
Понимание генератора может использоваться вместо карты. Встроенная функция карты не устарела, но для большинства людей она менее читабельна, чем понимание списка / генератора / словаря, поэтому я бы рекомендовал не использовать функцию карты в целом.
источник
простое решение без определения класса, которое возвращает кортеж
источник
Все генераторное решение. Не уверен в производительности (хотя itertools работает быстро)
источник
Да. Но вы не можете переопределить встроенные типы. Вы должны разделить их на подклассы:
источник
еще проще и без использования карты, вы можете сделать это
источник
В настоящее время я создаю подкласс класса «кортеж» для перегрузки +, - и *. Я считаю, что это делает код красивым и упрощает его написание.
источник
Если кому-то нужно усреднить список кортежей:
источник