2013-04-17 6 views
2

Я хочу запустить программу в Python, которая петли несколько раз, каждый раз создавая новый массив - то есть никакие данные не перезаписываются - с массивом с ссылкой на номер цикла, так что я могу назвать это в последующих циклах. Например, я мог бы захотеть создать массивы x0, x1, x2, ..., xi в цикле от 0 до i, а затем вызвать каждый из них в другом цикле, работающем над теми же переменными. (По сути, это эквивалент возможности перевести переменную в строку как 'string %d %(x)').Как переименовать переменные в цикле в Python

+14

Лучший способ не делать этого ... использовать список (или словарь) вместо – jamylak

+3

Ваша проблема заключается в том, что вы используют локальные переменные, где вы должны использовать список или словарь * вместо *. –

ответ

0

Использование Dict:

arraysDict = {} 
for i in range(0,3): 
    arraysDict['x{0}'.format(i)] = [1,2,3] 

print arraysDict 
# {'x2': [1, 2, 3], 'x0': [1, 2, 3], 'x1': [1, 2, 3]} 
print arraysDict['x1'] 
# [1,2,3] 

Использование списка:

arraysList = [] 
for i in range(0,3): 
    arraysList.append([1,2,3]) 

print arraysList 
# [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
print arraysList[1] 
# [1, 2, 3] 
0

Для этого вы можете создать объект, а затем использовать функцию setattr. В основном, это будет работать так:

setattr(myobject, 'string', value) 

Это то же самое, как делают: myobject.string = value

1

Вы можете получить доступ к globals() словарь ввести новые переменные. Как:

for i in range(0,5): 
    globals()['x'+str(i)] = i 

После этого цикла вы получите

>>> x0, x1, x2, x3, x4 
(0, 1, 2, 3, 4) 

Обратите внимание, что в соответствии с documentation, вы не должны использовать locals() словарь, как изменения в этот не может повлиять на значения, используемые переводчик.

+1

За исключением того, что он не работает для 'locals()' –

+0

Да, я уже изменил свой ответ. Хотя кажется, что это работает, если вы вводите новые переменные (и не меняете их значение впоследствии) – MartinStettner

+3

Обратите внимание на каждого, кто читает этот ответ: ПОЖАЛУЙСТА, НЕ ДОЛЖНЫ СДЕЛАТЬ ТАКОЕ СТУПИДНОЕ ВЕЩАНИЕ. Правильное решение - использовать dict или list. –

2

Опираясь на имена переменных и их изменение, это не лучший способ.

Как уже отмечалось в комментариях, было бы лучше использовать dict или список.

Смежные вопросы