2013-04-24 29 views
2

嗨,我卡在元組類型的更改值。我知道我不能改變元組類型的值,但有沒有辦法改變它?Python - '元組'對象不支持項目分配

a=[('z',1),('x',2),('r',4)] 
for i in range(len(a)): 
    a[i][1]=(a[i][1])/7 # i wanna do something like this !!! 

我想更改涉及的數目是概率例如:1/7,2/7,4/7和 是有一種方法來改變的數目爲一個浮?例如

a=[('z',0.143),('x',0.285),('r',0.571)] 
+1

如果你想改變一個元組,你真的需要一個'list'。 – Nemoden 2013-04-24 05:54:19

+1

替換整個元組,而不僅僅是一個組件。巴姆! – 2013-04-24 06:00:04

回答

2

要改變float很容易只是做

from __future__ import division # unnecessary on Py 3 

一個選項:

>>> a=[('z',1),('x',2),('r',4)] 
>>> a = [list(t) for t in a] 
>>> for i in range(len(a)): 
      a[i][1]=(a[i][1])/7 


>>> a 
[['z', 0.14285714285714285], ['x', 0.2857142857142857], ['r', 0.5714285714285714]] 

也許是最好的辦法:

>>> a=[('z',1),('x',2),('r',4)] 
>>> a[:] = [(x, y/7) for x, y in a] 
>>> a 
[('z', 0.14285714285714285), ('x', 0.2857142857142857), ('r', 0.5714285714285714)] 

正如意見中的要求,以3 「存儲和不打印」的小數位數

>>> import decimal 
>>> decimal.getcontext().prec = 3 
>>> [(x, decimal.Decimal(y)/7) for x, y in a] 
[('z', Decimal('0.143')), ('x', Decimal('0.286')), ('r', Decimal('0.571'))] 
+0

這個作品非常感謝你 – 2013-04-24 05:59:08

+0

可以以某種方式有3 dp? – 2013-04-24 06:09:48

+0

用於存儲不打印出來 – 2013-04-24 06:11:05

4

最簡單的也許是把元組到列表:

a=[['z',1], ['x',2], ['r',4]] 

不像元組,列表是可變的,所以你就可以改變單個元素。

+0

但我有100的價值,所以如何將其更改爲列表? 是不是它的名單(一)??? – 2013-04-24 05:54:48

+0

@TommyNgo:'a = map(list,a)'。 – NPE 2013-04-24 05:55:10

+1

@TommyNgo您必須製作物品清單。 'a'已經是一個列表。使用'map'如上所示,或者列表理解'new_list = [list(x)for x in a''']。 – squiguy 2013-04-24 05:58:48

相關問題