【问题标题】:How to use variable in name in python [duplicate]如何在python中使用名称中的变量[重复]
【发布时间】:2015-07-11 23:53:13
【问题描述】:

我有 1000 个变量,a1,a2,a3,a4,a5 等等。有没有办法使用循环将所有值初始化为 100

我的尝试:

for i in range(1,1001):
    "a"i=100

我在这里缺少基本语法。

【问题讨论】:

  • 那么为什么需要声明 1000 个变量?
  • 使用数组或 Python 等价物...
  • @TanveerAlam ..您可以想象一个国际象棋棋盘布局,每个块的名称为 a1,a2..a8,b1.....h8。现在我不想写 64 行不同的行,比如 a1=100,a2=100 等。我想循环执行。
  • 这个问题有很多重复,我找不到哪个是规范版本,如果有的话。请参阅Why you don't want to dynamically create variables 以获取指向另外 11 个副本的链接。

标签: python python-2.7


【解决方案1】:

永远不要这样做。你这样做绝对没有任何好处。如果您以这种方式设置它们,您怎么可能动态地引用这些变量?请改用列表或字典。

a_list = [None] + [100] * 1000
# `a_list[n]` in place of `an`, here

a_dict = {num:100 for num in range(1, 1001)}
# `a_dict[n]` in place of `an`, here

编辑你的棋盘类比:

import string

class ChessBoard(list):
    def __init__(self, side_length, initial_value=None):
        super().__init__()
        for _ in range(side_length):
            self.append([initial_value for _ in range(side_length)])

    def get(self, notation):
        """Maps chess notation to the 2D list"""

        indices = dict([(lett, num) for num,lett in 
                        enumerate(string.ascii_letters, start=1)])
        # {'a':1, 'b':2, ... 'Z':52}
        x, y = indices[notation[0]]-1, int(notation[1])-1
        return self[y][x]

board = ChessBoard(1000, 100)  # how do we index the 1000th...nevermind
board.get("a6")

【讨论】:

  • 与其在列表的开头添加None,不如习惯于使用 0 索引。 None-padding 会产生尴尬的问题,例如 len 比列表的逻辑元素数高一。
  • @user2357112 同意,这就是为什么我在优雅的解决方案中隐式地从零索引转换。但是,如果他要尝试引用一个像棋盘一样的元素,他需要有 1-indexing。
【解决方案2】:

我会重申这是一种不好的做法,但您可以这样做。

for i in xrange(1, 1001):
    globals()['a%s' % i] = 100

for i in xrange(1, 1001):
    name = 'a%d' % i
    print '%s = %d' % (name, globals()[name])

第二个循环只是打印它们。

【讨论】:

    【解决方案3】:

    要做这样的事情你真的应该使用一个列表。 初始化一个长度为 1000 的列表,每个条目设置为 100,可以通过

    a = [100]  * 1000
    

    您可以使用exec 在列表之外设置这样的变量,但这不是一个好习惯,除非您有一些奇怪的令人信服的理由这样做。

    请注意,条目的索引范围为 0 到 999。

    【讨论】:

      【解决方案4】:

      您可以使用Python Arrays/Lists. 执行此操作对于您的情况,您可以通过执行以下操作来创建 1000 100 的列表:

      my_array = [100]*1001
      

      要在该列表中找到某个值,您需要将其“索引”到其中。例如:

      print(my_array[300])
      

      打印语句将打印列表中的第 301 个值(因为数组索引从 0 开始计数)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 2013-04-10
        相关资源
        最近更新 更多