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)