ile nasıl eklenir böyle sözde kod var: Python bunu yazmak istiyorumküpe
if(b < a)
return (1,0)+foo(a-b,b)
. Ama python tuplleri ekleyebilir mi? Böyle bir şeyi kodlamanın en iyi yolu nedir?
ile nasıl eklenir böyle sözde kod var: Python bunu yazmak istiyorumküpe
if(b < a)
return (1,0)+foo(a-b,b)
. Ama python tuplleri ekleyebilir mi? Böyle bir şeyi kodlamanın en iyi yolu nedir?
Eleman ekli ekleme yapmak mı yoksa tuplleri eklemek mi istiyorsunuz? Bu daha iyi daha
def myadd(xs,ys):
return tuple(x + y for x, y in izip(xs, ys))
veya olarak yazılır, @ delnan 'in yorumları açıkça yapar gibi,
def myadd(x,y):
z = []
for i in range(len(x)):
z.append(x[i]+y[i])
return tuple(z)
Ayrıca: Varsayılan piton By
(1,2)+(3,4) = (1,2,3,4)
Sen olarak kendi tanımlayabilir yapar işlevsel olarak:
myadd = lambda xs,ys: tuple(x + y for x, y in izip(xs, ys))
Sonra
if(b < a) return myadd((1,0),foo(a-b,b))
I veya, daha doğal
>>> map(sum, zip((1, 2), (3, 4)))
[4, 6]
için gider yapın:
>>> numpy.array((1, 2)) + numpy.array((3, 4))
array([4, 6])
işleri - fakat numpy içe aktarmak zorunda olmak, küçük kodlar için aşırı olabilir. – jitter
tuple(map(operator.add, a, b))
, bu yaklaşım gerektirir tuple'lar Python 2.7 veya daha önceki bir sürümde aynı uzunlukta olmalı, bunun yerine bir TypeError'u yükseltmek. Python 3'te, map
, biraz farklıdır, böylece sonuç, a
ve b
'un daha kısa olan uzunluğa eşit bir toplam sayısıdır. Eğer bu şekilde hareket etmek +
kendisi istiyorsanız tuple
alt sınıfı olabilir,
tuple(itertools.imap(operator.add, a, b))
stili kazmak ama başka bir ithalat gerektirir. – jitter
ve ek geçersiz: Eğer Python 2'de kesilme davranış istiyorsanız
, sen itertools.imap
ile map
yerini alabilir
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__
için aynı şey geçerli (elementwise >
) vb Mor Bu özel operatörler hakkındaki bilgi, örn. here (numeric operations) ve here (comparisions)
Hala orijinal tanımlama grubu eklenmesini arayarak dizilerini ekleyebilirsiniz: tuple.__add__(a,b)
yerine a+b
. Veya bunu yapmak için yeni sınıfta bir append()
işlev tanımlayın.
'tuple (x + y için x, y'de izip (xs, ys))'. – delnan
tam olarak 'myadd' gibi bir şey yapmak istiyorum bu en iyi yoldur? – fpointbin
Evet, ve delnan’ın yorumu daha çirkin. – highBandWidth