[python] 루프에서 다른 변수 이름을 어떻게 생성합니까? [복제]

예를 들어 …

for x in range(0,9):
    string'x' = "Hello"

그래서 나는 string1, string2, string3으로 끝납니다. 모두 “Hello”와 같습니다.



답변

물론 넌 할 수있어; 사전 이라고합니다 .

d = {}
for x in range(1, 10):
    d["string{0}".format(x)] = "Hello"
>>> d["string5"]
'Hello'
>>> d
{'string1': 'Hello',
 'string2': 'Hello',
 'string3': 'Hello',
 'string4': 'Hello',
 'string5': 'Hello',
 'string6': 'Hello',
 'string7': 'Hello',
 'string8': 'Hello',
 'string9': 'Hello'}

나는이 다소 혀를 점검했지만 실제로 한 값을 다른 값과 연관시키는 가장 좋은 방법은 사전입니다. 그것이 바로 그것이 설계된 것입니다!


답변

정말 나쁜 생각이지만 …

for x in range(0, 9):
    globals()['string%s' % x] = 'Hello'

그리고 예를 들면 :

print(string3)

당신에게 줄 것입니다 :

Hello

그러나 이것은 나쁜 습관입니다. 다른 사람들이 제안하는대로 사전이나 목록을 대신 사용해야합니다. 물론 방법을 알고 싶었지만 사용하고 싶지 않은 경우가 아니라면 말입니다.


답변

이를 수행 할 수있는 한 가지 방법은 exec(). 예를 들면 :

for k in range(5):
    exec(f'cat_{k} = k*2')
>>> print(cat_0)
0
>>> print(cat_1)
2
>>> print(cat_2)
4
>>> print(cat_3)
6
>>> print(cat_4)
8

여기서 저는 Python 3.6+에서 편리한 f 문자열 형식을 활용하고 있습니다.


답변

변수 변수 이름을 만드는 것은 의미가 없습니다. 왜?

  • 불필요합니다 : 모든 것을 목록, 사전 등에 저장할 수 있습니다.
  • 생성하기 어렵습니다. 사용 exec하거나globals()
  • 사용할 수 없습니다. 이러한 변수를 사용하는 코드를 어떻게 작성합니까? 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


답변

사전을 사용하지 마십시오.

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

dict를 사용하지 마십시오

globals ()는 네임 스페이스가 현재 가리키는 것을 제공하므로 위험이 있지만 변경 될 수 있으므로 globals ()의 반환 값을 수정하는 것은 좋은 생각이 아닙니다.


답변

for x in range(9):
    exec("string" + str(x) + " = 'hello'")

작동합니다.


답변

목록을 사용합니다.

string = []
for i in range(0, 9):
  string.append("Hello")

이렇게하면 9 개의 “Hello”가 있고 다음과 같이 개별적으로 가져올 수 있습니다.

string[x]

어디 x당신이 원하는에 “Hello”를 식별한다.

그래서 print(string[1])인쇄 Hello합니다.