सवाल पाइथन तत्व-वार टुपल ऑपरेशंस जैसे योग


क्या इस तरह काम करने के लिए पाइथन में टुपल ऑपरेशन प्राप्त करने के लिए वैसे भी है:

>>> 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__ विधियों को इस तरह काम करने के लिए परिभाषित किया गया है। तो उन्हें एकमात्र तरीका फिर से परिभाषित करना होगा?


77
2018-01-31 00:51


मूल




जवाब:


import operator
tuple(map(operator.add, a, b))

106
2018-01-31 02:49



मैं कहूंगा कि यह सबसे पायथनिक समाधान है। - Matthew Schinckel
सिवाय इसके कि नक्शा () अर्ध-बहिष्कृत है। देख artima.com/weblogs/viewpost.jsp?thread=98196 Guido द्वारा एक लेख के लिए जहां यह उल्लेख करता है कि सूची समझ के रूप में मानचित्र कैसे बेहतर लिखा जाता है। - Adam Parkin
यह भी उड़ाता है यदि ए और बी में तत्वों की संख्या समान नहीं है, या "addable" नहीं हैं (उदा: map(operator.add, (1,2), ("3", "4")) - Adam Parkin
tuple([item1 + item2 for item1, item2 in zip(a, b)]) एक सूची समझ के बराबर होगा। - Adam Parkin
@ एडमपार्किन, जेनरेटर समझ भी बेहतर है tuple(item1 + item2 for item1, item2 in zip(a, b))। - Cristian Ciupitu


सभी अंतर्निर्मित का उपयोग करना ..

tuple(map(sum, zip(a, b)))

82
2017-10-03 06:20



यह सरल, बेहतर उत्तर प्रतीत होता है। यह क्यों स्वीकार नहीं किया जाता है? - Marc Cenedella
यह अच्छा है, लेकिन तकनीकी रूप से यह नहीं पूछा जाता है कि नक्शा एक सूची देता है, न कि टुपल ... इसलिए: tuple(map(sum,zip(a,b)) - Ben
वाक्यविन्यास रहस्यवादी है। - anatoly techtonik
ऐसा लगता है कि एक सही कोष्ठक लापता है - Zing Lee
इसका लाभ यह है कि आप इसे बढ़ा सकते हैं: tuple(map(sum,zip(a,b, c)) - Andy Hayden


इस समाधान को आयात की आवश्यकता नहीं है:

tuple(map(lambda x, y: x + y, tuple1, tuple2))

28
2018-01-31 01:10



यह समाधान अन्य नो-आयात, एक-लाइनर समाधान से भी तेज़ है (map(sum, zip(a, b))) - Air


पहले दो उत्तरों को संयुक्त करने के क्रमबद्ध करें, लोहे के फ्रेम के लिए एक चिमटा के साथ ताकि यह एक tuple लौटाता है:

import operator

class stuple(tuple):
    def __add__(self, other):
        return self.__class__(map(operator.add, self, other))
        # obviously leaving out checking lengths

>>> a = stuple([1,2,3])
>>> b = stuple([3,2,1])
>>> a + b
(4, 4, 4)

नोट: का उपयोग कर self.__class__ के बजाय stuple subclassing को कम करने के लिए।


19
2018-01-31 22:25





from numpy import *

a = array( [1,2,3] )
b = array( [3,2,1] )

print a + b

देता है array([4,4,4])

देख http://www.scipy.org/Tentative_NumPy_Tutorial


16
2018-01-14 20:22



यह काम करेगा, लेकिन यह एक साधारण अतिरिक्त ऑपरेशन के लिए सिर्फ नमस्ते आयात करने के लिए थोड़ा भारी है।


मानचित्र के बजाय जनरेटर समझ का उपयोग किया जा सकता है। अंतर्निहित नक्शा फ़ंक्शन अप्रचलित नहीं है लेकिन सूची / जनरेटर / dict समझ की तुलना में अधिकांश लोगों के लिए यह कम पठनीय है, इसलिए मैं सामान्य रूप से मानचित्र फ़ंक्शन का उपयोग न करने की अनुशंसा करता हूं।

tuple(p+q for p, q in zip(a, b))

8
2017-09-26 21:25





सभी जनरेटर समाधान। प्रदर्शन पर निश्चित नहीं है (हालांकि, इटारटोल तेज है, हालांकि)

import itertools
tuple(x+y for x, y in itertools.izip(a,b))

6
2018-06-24 16:10





वर्ग परिभाषा के बिना सरल समाधान जो ट्यूपल देता है

import operator
tuple(map(operator.add,a,b))

5
2018-01-31 00:55