代码之家  ›  专栏  ›  技术社区  ›  Siwel

向元组中的所有值添加整数

  •  7
  • Siwel  · 技术社区  · 10 年前

    在下面所示的代码中编辑元组的推荐/最python的方法是什么?

    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)
    

    然而,这些都不起作用。

    2 回复  |  直到 10 年前
        1
  •  13
  •   chepner    10 年前

    只需将生成器表达式与 tuple :

    my_tup = tuple(x+1 for x in max_tup)
    # or my_tup = tuple(x+1 for x in max(tup_list))
    
        2
  •  2
  •   meisterluk Michael Borgwardt    10 年前
    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,则最大值保持不变。因此,您需要仔细考虑它,这段代码比任何其他方法做的工作都多。

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