Python 如何通过给定索引修改包含特定值的元组列表中的元组

Python 如何通过给定索引修改包含特定值的元组列表中的元组,python,list,tuples,Python,List,Tuples,比如说,我有一个元组列表 a = [('foo', 3), ('bar', 1)] 我想修改元组中包含'foo'的第二个元素。更具体地说,我想增加这个数字。换言之,我想这样做 >>> increment(a, 'foo') >>> print a [('foo', 4), ('bar', 1)] 不能直接更改元组中的值(元组是不可变的)。但是,您可以使用与旧元组非常相似的新元组替换元素: def increment(a, name): for i,

比如说,我有一个元组列表

a = [('foo', 3), ('bar', 1)]
我想修改元组中包含
'foo'
的第二个元素。更具体地说,我想增加这个数字。换言之,我想这样做

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

不能直接更改元组中的值(元组是不可变的)。但是,您可以使用与旧元组非常相似的新元组替换元素:

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

正如我在评论中提到的,在这种情况下,您不能更改元组的内容,因此要回答问题标题中提出的问题(并替换该索引中的整个元组,如果有的话):

输出:

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

您考虑过改用字典吗?然后你可以只做
a['foo']+=1
。元组的内容不能更改,尽管元组中的任何可变对象都可以更改。不幸的是,您想更改一个不可变类型的整数值。因此,您必须在列表中所需的索引处替换整个元组。@senshin您介意扩展这个想法吗?我的意思是,如果您只有一个2元组的列表,并且您想通过引用它们的第0个索引与它们交互,这似乎正是您希望对-
a={'foo':3,'bar':1}
使用字典的内容。当然,这可能无法很好地处理代码的其余部分。通过使用
break
假设只有一个
foo
元组,可能还有更多1@AlexanderStarostin:没错。但是OP提到了“元组”,这意味着只有一个元组。显然,如果可以有多个,请删除
中断符
。当然,谢谢。我不确定OP的完整要求是什么,
break
带来了OP需要注意的一些限制:)
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)