如何在循环中创建不同的变量名?

Tak*_*kun 105 python variables loops

例如......

for x in range(0,9):
    string'x' = "Hello"
Run Code Online (Sandbox Code Playgroud)

所以我最终得到了string1,string2,string3 ......等于"你好"

the*_*olf 137

你当然可以; 它被称为字典:

d={}
for x in range(1,10):
        d["string{0}".format(x)]="Hello"

In [7]: d["string5"]
Out[7]: 'Hello'

In [8]: d
Out[8]: 
{'string1': 'Hello',
 'string2': 'Hello',
 'string3': 'Hello',
 'string4': 'Hello',
 'string5': 'Hello',
 'string6': 'Hello',
 'string7': 'Hello',
 'string8': 'Hello',
 'string9': 'Hello'}
Run Code Online (Sandbox Code Playgroud)

我说这个有点舌头,但实际上将一个值与另一个值相关联的最佳方法是字典.这就是它的设计目标!

  • 这不应该被标记为正确答案,因为它不是;这是一本字典,而不是动态变量赋值,这正是OP所要求的。 (24认同)
  • @JBernardo:为此目的不支持使用`locals()`.有关重要说明,请参阅[locals()`]的文档(http://docs.python.org/library/functions.html#locals). (11认同)
  • 这是正确的答案,因为每次您认为需要动态变量赋值时,您实际上应该只使用字典。我就是这样来到这里的;由于这个答案,我的代码现在更好了。 (2认同)

Tad*_*eck 51

这真是个坏主意,但......

for x in range(0, 9):
    globals()['string%s' % x] = 'Hello'
Run Code Online (Sandbox Code Playgroud)

然后例如:

print(string3)
Run Code Online (Sandbox Code Playgroud)

会给你:

Hello
Run Code Online (Sandbox Code Playgroud)

然而,这是不好的做法.您应该像其他人提议的那样使用词典或列表.当然,除非你真的想知道怎么做,但不想使用它.

  • @paintedcones:首先,_应该有一种方法可以做到_,使用简单的词典更自然.使用全局字典而不是一个坏主意,因为它也"隐式"创建全局变量或修改它们.由于设置和修改变量都需要字典表示法,因此没有理由使用`globals()`而不是简单的`dict`. (5认同)
  • 你能详细说明为什么这是一个坏主意吗? (4认同)
  • 这应该被标记为正确答案,而不是另一个。问题是如何动态创建变量,而不是“实现类似目标的最推荐的方法”。 (3认同)

Joc*_*zel 15

创建变量变量名称毫无意义.为什么?

  • 它们是不必要的:您可以将所有内容存储在列表,字典等中
  • 它们很难创建:你必须使用execglobals()
  • 你不能使用它们:你如何编写使用这些变量的代码?你必须exec/globals()再次使用

使用列表更容易:

# 8 strings: `Hello String 0, .. ,Hello String 8`
strings = ["Hello String %d" % x for x in range(9)]
for string in strings: # you can loop over them
    print string
print string[6] # or pick any of them
Run Code Online (Sandbox Code Playgroud)


小智 12

一种方法是使用exec()。例如:

for k in range(5):
    exec(f'cat_{k} = k*2')
Run Code Online (Sandbox Code Playgroud)

打印(cat_0)
0
打印(cat_1)
2
打印(cat_2)
4
打印(cat_3)
6
打印(cat_4)
8

在这里,我利用了Python 3.6+中方便的f字符串格式

  • 记住`exec`一些东西,黑魔法,攻击漏洞,坏东西,但它确实回答了所问的问题。 (9认同)

小智 12

for x in range(9):
    exec("string" + str(x) + " = 'hello'")
Run Code Online (Sandbox Code Playgroud)

这应该有效。


小智 9

不要这样做使用字典

import sys
this = sys.modules[__name__] # this is now your current namespace
for x in range(0,9):
    setattr(this, 'string%s' % x, 'Hello')

print string0
print string1
print string2
print string3
print string4
print string5
print string6
print string7
print string8
Run Code Online (Sandbox Code Playgroud)

不要这样做使用字典

globals()有风险,因为它为你提供了命名空间当前指向的内容,但这可能会改变,因此修改globals()的返回值不是一个好主意


Lle*_*rgo 6

我会使用一个列表:

string = []
for i in range(0, 9):
  string.append("Hello")
Run Code Online (Sandbox Code Playgroud)

这样,你就会有 9 个“Hello”,你可以像这样单独得到它们:

string[x]
Run Code Online (Sandbox Code Playgroud)

在哪里x可以识别您想要哪个“Hello”。

所以,print(string[1])会打印Hello.