2010-08-06 13 views
8

Soru bir yanıltıcıdır çünkü bir tuple immutable'dir. İstediğim geçerli:Python: Tuple elementi (son) nasıl değiştirilir?

tam a iki katı geçen eleman, diyelim ki, bir son argüman haricinde a gibidir bir demet b olsun bir demet a = (1, 2, 3, 4) olması.

=> b == (1, 2, 3, 8)

+3

Eğer yardımcı olabilirseniz, elemanların yerinde manipülasyonunu yapacaksanız bir liste kullanmayı düşünün. – user37078

+0

Ben senaryoda tuples kullanmak daha mantıklı olduğunu düşünüyorum - 'major.minor.branch.build -> (major, minor, branch, build)' formunda program sürümlerini temsil etmem gerekiyor. –

+0

Belirli bir sürümden 'önceki oluşturma' sürümünü edinin Sürüm numaraları için 'distutils.version.StrictVersion' sınıfını da kullanabilirsiniz. – SiggyF

cevap

19
b = a[:-1] + (a[-1]*2,) 

Ne burada ne işim iki küpe oluşan birleşik, son öğe ancak ilk içeren her şey ve yeni bir tanımlama grubu Son elemanın mutasyonunu içeren Sonuç, istediğini içeren yeni bir tuple.

+ için bir tuple döndürdüğünü unutmayın, her iki işlenen de bir tuple olmalıdır. Ben böyle bir şey yapsın

+2

Nasıl hakkında (a [-1] * 2,) '? Yukarıdaki bir TypeError atar. (bir tek öğe için sondaki virgül gereklidir) – Skilldrick

+0

@Skilldrick teşekkürler, düzenlenmiş – Ivo

6

:

b=list(a) 
b[-1]*=2 
b=tuple(b) 
+1

+1: Bu oldukça okunaklı ve esnektir. – EOL

5

İşte bunu yapmanın bir yolu:

>>> a = (1, 2, 3, 4) 
>>> b = a[:-1] + (a[-1]*2,) 
>>> a 
(1, 2, 3, 4) 
>>> b 
(1, 2, 3, 8) 

Peki ikinci satırda olur? a [: - 1], son eleman hariç hepsi anlamına gelir. a [-1] son ​​elemandır ve iki ile çarpıyoruz. (A [-1] * 2,) sonucu bir tuple çevirir ve dilimlenmiş tuple + operatörü kullanılarak birleştirilir. Sonuç b'ye konur.

Bunu özel durumunuza dayabilirsiniz.

İlgili konular