【问题标题】:Adding an integer to all values in a tuple将整数添加到元组中的所有值
【发布时间】:2016-07-20 12:55:48
【问题描述】:

在如下所示的代码中编辑元组的推荐/最 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)

但显然这些都不起作用。

【问题讨论】:

  • 第一个似乎是最易读的。您还应该使用timeit 模块测试速度,我认为它会给出接近的结果。
  • @Rockybilly 我同意。在这种情况下,速度不是问题。

标签: python python-2.7 tuples


【解决方案1】:

只需使用带有tuple的生成器表达式:

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

【讨论】:

  • 这就是我要找的东西,感觉我一定错过了什么!
【解决方案2】:
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,则使用最大值保持不变的不变量。因此,您需要仔细考虑它,此代码比任何其他方法都做得更多。

所以我会选择第一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2022-08-18
    • 2022-12-12
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多