2014-12-02 58 views
2

我的元組在Python列表,說如何在Python中查找元組列表中的元組索引?

a = [('foo', 3), ('bar', 1)] 

,我要修改的第二個元素中包含'foo'元組。更具體地說,我想增加這個數字。在其他方面,我想這樣做

>>> increment(a, 'foo') 
>>> print a 
[('foo', 4), ('bar', 1)] 
+2

你有使用字典而不是考慮?那麼你可以做一個['foo'] + = 1'。 – senshin 2014-12-02 01:18:17

+1

一個元組的內容不能改變,儘管它們中的任何可變對象都可以。不幸的是,你想改變一個不可變類型的整數值,所以你必須在列表中所需的索引處替換整個元組。 – martineau 2014-12-02 01:19:08

+0

@ senshin你想介紹一下這個想法嗎? – usernumber 2014-12-02 01:57:12

回答

1

您不能直接改變內值一個元組(元組是不可變的)。

def increment(a, name): 
    for i, x in enumerate(a): 
     if x[0] == name: 
      a[i] = (x[0], x[1] + 1) 
      break 
+0

通過使用'break'你假設只有一個'foo'元組,可能還有更多的1 – 2014-12-02 01:20:09

+1

@AlexanderStarostin:的確如此。但是OP提到*「元組」*意味着只有一個。顯然,如果可以有多個,那麼刪除'break'。 – 2014-12-02 01:20:54

+0

當然,謝謝。我不確定OP的全部要求是什麼,'break'帶來OP需要注意的一些限制:) – 2014-12-02 01:23:33

0

正如我在我的評論中提到,你不能改變一個元組的內容,在這種情況下,可以這麼:但是,你可以用一個新的元組,看起來很像舊更換部件回答你的問題的標題提出的問題(和指數更換整個元組,如果有的話,實測值):

a = [('foo', 3), ('bar', 1)] 

def find_index(name, seq): 
    for i, tpl in enumerate(seq): 
     if tpl[0] == name: 
      return i 
    return None 

i = find_index('foo', a) 
if i is not None: 
    a[i] = a[i][0], a[i][1]+1 

print(a) 

輸出:

[('foo', 4), ('bar', 1)]