【问题标题】:How can I use a for loop to iterate through numbered variables?如何使用 for 循环遍历编号变量?
【发布时间】:2016-01-14 04:59:44
【问题描述】:

我有 20 个变量,分别命名为 line1line2line3、...,直到 line20

在 Python 中有没有办法使用for 循环按顺序引用这些变量中的每一个,即遍历它们?大意是这样的:

for i in range(1, 21):
    print(line + str(i))

虽然我知道那是错误的。

【问题讨论】:

  • 这是可能的,但不是正确的做法。使用列表而不是 20 个变量。
  • 你有 20 个单独的变量,称为 line1....line20?正如@interjay 建议的那样,将这些变量移到一个列表中。它会让您的生活更轻松。
  • 它们都是列表,每个都有 20 个元素。这是一个 20 x 20 的网格,每行有一个列表。
  • 也许字典会比列表更有效率?
  • 然后使用列表列表。

标签: python python-3.x for-loop


【解决方案1】:

不要像这样使用单独的变量。使用列表。拥有一堆名称相似的变量是anti-pattern

lines = []

# add 20 strings to the list

for line in lines:
    print(line)

【讨论】:

    【解决方案2】:

    将变量移到列表中。

    所以如果 line1 = "foo" 和 line2 = "boo" 就这样做吧:

    a = ["foo", "boo"]
    
    for i, v in enumerate(a):
        print("{}: {}".format(i + 1, v))
    

    会给你这样的输出:

    1: foo
    2: boo 
    

    或者,如果您只是想迭代该数组,那么就这样做:

    for i in a:
        print(i)
    

    这将简单地输出:

    foo
    boo
    

    【讨论】:

      【解决方案3】:

      我同意其他人的观点,最好转到列表,但您可以使用eval

      >>> line1 = "This"
      >>> line2 = "isn't"
      >>> line3 = "Recommended"
      >>> for i in range(1,4):
          print(eval("line" + str(i)))
      
      
      This
      isn't
      Recommended
      

      除了使用列表更自然之外,也不建议这样做,因为eval can be dangerous。虽然eval 确实有一些用途并且可以安全使用(尽管从不安全地用于用户输入字符串),但避免重构代码并不是一个有效的用例。所以——除了使您的代码更易于阅读和维护之外,使用列表或字典还可以使您的代码更安全,因为这样您就不太可能以骇人听闻的方式使用eval

      【讨论】:

        【解决方案4】:

        lst = ['line0', 'line1', 'line2']

        for line_num, line_name in enumerate(lst):
            print 'Line str: %s, Line number: %s' % (line_num, line_name)
        

        这将打印: 行str:line0,行号:0 行str:line1,行号:1 行str:line02,行号:2

        【讨论】:

        • 只是因为print在Python 3中是一个函数而不是一个语句;这不会影响所提出的解决方案。
        • 但这会打印变量的名称——而不是它们的值
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2020-08-18
        • 2013-05-25
        • 2016-01-18
        • 2016-02-05
        • 2020-11-29
        • 2011-08-07
        相关资源
        最近更新 更多