如何在Python中对元组进行增量操作?

12
假设我有以下形式的元组:
[(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))]
那么如何将元组中的数字递增,使它们的格式为:
[(('d',1),('g',1)),(('d',1),('d',2)),(('i',1),('g',1))]

我能够在单个for循环中完成此操作。但是我正在寻找更短的方法。
注:您可以创建新元组
3个回答

10
一种列表推导式可以解决这个问题:
>>> t = [(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))] 

>>> print([tuple((a, b+1) for a, b in group) for group in t])

   [[('d', 1), ('g', 1)], [('d', 1), ('d', 2)], [('i', 1), ('g', 1)]]

对于较新的Python 3+版本,print需要括号: print( [tuple((a, b + 1) for a, b in group) for group in t] ) - DaHoC

5

你无法更改元组中的值,因为元组是不可变的。如果要更改元组中的值,需要将其转换成列表或创建一个新的元组并将所需值存储在其中。


2
元组根据问题在列表中。 - Navith
2
@Navith 对的,但元组本身仍然无法更改,无论它们是否在列表中。 - Eric Renouf
您可以创建新元组并将其存储。 - Palash Ahuja
请详细说明,@Navith。 - Palash Ahuja
@Navith 这就是我想说的,哪一部分没有表达出来呢?你不能改变元组,但是你可以像我说的那样“创建一个新的带有所需值的元组并存储它”。 - Eric Renouf
显示剩余2条评论

2

这是最不符合Python风格的方法,但是最具解释性。

将其分割成列表,将值添加到整数列表中,然后将它们打包在一起:

valued = []
lettered = []
plusone = []
listed = [(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))]
for x,y in listed:
    for subx, suby in x,y:
        valued.append(int(suby))
        lettered.append(subx)
for value in valued:
    value = value + 1
    plusone.append(int(value))
#print plusone
coolness = zip(lettered,plusone)
print coolness
exit()

结果如下: [('d', 1), ('g', 1), ('d', 1), ('d', 2), ('i', 1), ('g', 1)]


2
我能够在一个for循环中完成这个任务。但是我正在寻找更短的方法。这并不是更短的方法... - David Greydanus
1
@DavidGreydanus 哎呀,我发誓一开始问题里没有这个。 - james-see

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接