在如下所示的代码中编辑元组的推荐/最pythonic方法是什么?
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)
但是,这些都不能明显起作用。
答案 0 :(得分:10)
只需使用tuple
的生成器表达式:
my_tup = tuple(x+1 for x in max_tup)
# or my_tup = tuple(x+1 for x in max(tup_list))
答案 1 :(得分: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,则最大值保持不变。所以你需要绕过它,这段代码比其他方法做得更多。
所以我会选择第一种方法。