साथ जोड़ने के लिए मैं इस तरह छद्म कोड है:कैसे tuples
if(b < a)
return (1,0)+foo(a-b,b)
मैं अजगर में यह लिखना चाहते हैं। लेकिन पाइथन जोड़ों को जोड़ सकते हैं? ऐसा कुछ कोड करने का सबसे अच्छा तरीका क्या है?
साथ जोड़ने के लिए मैं इस तरह छद्म कोड है:कैसे tuples
if(b < a)
return (1,0)+foo(a-b,b)
मैं अजगर में यह लिखना चाहते हैं। लेकिन पाइथन जोड़ों को जोड़ सकते हैं? ऐसा कुछ कोड करने का सबसे अच्छा तरीका क्या है?
क्या आप तत्व-वार जोड़ना चाहते हैं, या tuples को जोड़ना चाहते हैं? डिफ़ॉल्ट अजगर तक करता
(1,2)+(3,4) = (1,2,3,4)
आप के रूप में अपने निर्धारित कर सकते हैं:,
def myadd(x,y):
z = []
for i in range(len(x)):
z.append(x[i]+y[i])
return tuple(z)
के रूप में भी @ delnan की टिप्पणी यह स्पष्ट करता है, इस के रूप में बेहतर
def myadd(xs,ys):
return tuple(x + y for x, y in izip(xs, ys))
या इससे भी अधिक लिखा है कार्यात्मक रूप से:
myadd = lambda xs,ys: tuple(x + y for x, y in izip(xs, ys))
फिर
if(b < a) return myadd((1,0),foo(a-b,b))
मैं
>>> map(sum, zip((1, 2), (3, 4)))
[4, 6]
या, और अधिक स्वाभाविक रूप से के लिए जाना चाहते हैं कार्य करें:
>>> numpy.array((1, 2)) + numpy.array((3, 4))
array([4, 6])
काम करता है - लेकिन छोटे कोड के लिए numpy आयात करने के लिए overkill हो सकता है। – jitter
tuple(map(operator.add, a, b))
highBandWidth से जवाब देने के लिए इसके विपरीत, इस दृष्टिकोण की आवश्यकता है कि पाइथन 2.7 या इससे पहले की तरह, एक टाइपरर को बढ़ाने के बजाय tuples एक ही लंबाई के हो। पायथन 3, map
में थोड़ा अलग है, इसलिए परिणाम a
और b
के छोटे के बराबर लंबाई के साथ रकम का एक गुच्छा है।
आप अजगर 2 में काट-छांट व्यवहार चाहते हैं, आप itertools.imap
साथ map
की जगह ले सकता:
tuple(itertools.imap(operator.add, a, b))
शैली खोदना है लेकिन एक और आयात की आवश्यकता है। – jitter
आप इस तरह से कार्य करने के लिए +
ही चाहते हैं तो आपको tuple
उपवर्ग सकता है और इसके अलावा ओवरराइड:
class mytup(tuple):
def __add__(self, other):
if len(self) != len(other):
return NotImplemented # or raise an error, whatever you prefer
else:
return mytup(x+y for x,y in izip(self,other))
ही चला जाता है __sub__
, __mul__
, __div__
, __gt__
के लिए (elementwise >
) आदि मोर इन विशेष ऑपरेटरों पर ई जानकारी मिल सकती है उदा। here (numeric operations) और here (comparisions)
आप अभी भी मूल टपल इसके अलावा फोन करके tuples संलग्न कर सकते हैं: tuple.__add__(a,b)
बजाय a+b
। या ऐसा करने के लिए नई कक्षा में append()
फ़ंक्शन को परिभाषित करें।
'tuple (x + y x, y में izip (xs, ys))'। – delnan
बिल्कुल मैं 'myadd' की तरह कुछ करना चाहता हूं यह सबसे अच्छा तरीका है? – fpointbin
हां, और डेलनान की टिप्पणी अधिक गंदी है। – highBandWidth