2016-07-20 57 views
1

在如下所示的代码中编辑元组的一种推荐的/最蟒蛇的方式是什么?向一个元组中的所有值添加一个整数

tup_list = [(1, 2), (5, 0), (3, 3), (5, 4)] 
max_tup = max(tup_list) 
my_tup1 = (max_tup[0] + 1, max_tup[1] + 1) 
my_tup2 = tuple(map(lambda x: x + 1, max_tup)) 
my_tup3 = max([(x+1, y+1) for (x, y) in tup_list]) 

以上三种方法哪一种是首选,还是有更好的方法来做到这一点? (在这个例子中当然应该返回(6, 5))。

有一种诱惑,像做

my_tup = max(tup_list)[:] + 1 

my_tup = max(tup_list) + (1, 1) 

但是没有这些工作的效果明显。

+1

第一个看起来是最可读的。您还应该使用'timeit'模块来测试速度,我认为这会让结果更接近。 – Rockybilly

+1

@Rockybilly我同意。在这种情况下,速度不是问题。 – Siwel

回答

5

只需使用一台发电机表达tuple

my_tup = tuple(x+1 for x in max_tup) 
# or my_tup = tuple(x+1 for x in max(tup_list)) 
+0

这就是我一直在寻找的东西,感觉就像我一定错过了一些东西! – Siwel

1
my_tup1 = (max_tup[0] + 1, max_tup[1] + 1) 

直截了当,易于阅读。圆括号明确指出将创建一个元组,并且+表示将修改数字。因此它也似乎pythonic。

my_tup2 = tuple(map(lambda x: x + 1, max_tup)) 

注意到的功能性的方法,但元组被滥用为列表,并且最后它被转换回为元组。不是直截了当的人不知道python的元组是如何工作的。

my_tup3 = max([(x+1, y+1) for (x, y) in tup_list]) 

用途不变,如此你需要用它周围你的头最大的仍然是相同的,如果所有的值加1,这个代码比其他任何方式更多的工作。

所以我会去第一种方法。

相关问题