【问题标题】:How to minus one on multiple variable? python如何在多个变量上减去一个? Python
【发布时间】:2013-09-24 20:27:23
【问题描述】:

我有来自两个不同对象的两组相同的int 变量的关键,但一个以 0 开始其第一个元素,另一个以 1 开始

a = 0, b = 5, c = 7 # var_abc
x = 1, y = 6, d = 6 # var_xyz

为了进行其他处理,我必须将 var_xyz 转换为 var_xyz == var_abc,所以我必须为 var_xyz 中的每个变量编写这一行代码:

x,y,z = x-1, y-1, z-1

如果我们只是实例化 var_xyz 中的变量,我们可以这样做:

x,y,z = (0,)*3

是否有另一种方法使我不需要为 var_xyz 中的每个变量硬编码 var-1?想象一下,如果 var_xyz 中有 1000 个变量。

【问题讨论】:

  • 你能阐明你的目标吗? d 应该是 8 对吧?你的意思是a,b,c = x-1,y-1,z-1?您确实需要一个列表,然后您可以像下面的大多数答案一样使用列表理解。
  • 如果d=8 那么在var_xyz中有一个对应的变量等于7

标签: python int hardcode


【解决方案1】:

您已经注意到,对于一千个变量的情况进行重复会很麻烦,这很好。这表明您需要提升一个抽象级别,这样您就可以拥有一个列表或一个字典,而不是一千个变量,然后可以对其进行循环。

例如,如果从 0 开始计算变量是有意义的,则可以使用列表:

>>> vv = [10,20,30,40,50]
>>> vv[3]
40

然后使用列表推导进行减法:

>>> vv = [v-1 for v in vv]
>>> vv
[9, 19, 29, 39, 49]
>>> vv[3]
39

或者如果变量有名字很重要,你可以使用字典:

>>> # first, let's make a test dictionary
>>> from string import ascii_lowercase
>>> d = {k: i for i, k in enumerate(ascii_lowercase[:10])}
>>> d
{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'j': 9}
>>> d['d']
3

并使用字典推导来简化减法:

>>> d = {k: v-1 for k,v in d.iteritems()}
>>> d['d']
2

【讨论】:

    【解决方案2】:

    你可以这样做:

    x,y,z = [v - 1 for v in (x,y,z)]
    

    但是,它无助于可能的 1000 变量场景。除了使用 listdict 而不是单独的变量之外,目前还不清楚您想做什么。

    【讨论】:

      【解决方案3】:

      如果我理解正确,您可以使用列表理解:

      orig_list = [x,y,z]
      minus_list = [value - 1 for value in orig_list]
      # if desired put a,b,c up there or...
      a,b,c = minus_list
      

      【讨论】:

        【解决方案4】:

        使用列表或字典。就是这样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-24
          • 2013-04-20
          • 2012-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-19
          相关资源
          最近更新 更多