Как я могу создать переменные, просматривая комбинацию целых чисел и строк? - PullRequest
1 голос
/ 14 ноября 2011

Итак, я хочу создать переменные, перебирая операторы или функции присваивания имен.Я хочу получить переменные с названиями "t1, t2, t3" и т.д.(Держите str("t") впереди, а второй символ измените int(i). Это делается для того, чтобы создавать переменные для последующего помещения в массив без необходимости их ввода в код.)список из 10000 списков по 4 элемента в каждом.Это более понятно?

Ответы [ 3 ]

5 голосов
/ 14 ноября 2011

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

Исходя из вашего примера кода, что-то вроде

t = [[0] * 4 for i in xrange(10000)]

(как упомянул Дэвид Альбер в комментарии) должно работать для вас;он создаст список из 10000 списков по 4 элемента в каждом.

PS В Python 3 функция xrange была переименована в range.

5 голосов
/ 14 ноября 2011

Не пытайтесь.

Вместо этого используйте один словарь, чтобы сохранить все значения - ваши заголовки могут быть ключами:

my_dict = {}
for i in range(1, 4):
    my_dict['t%s' % i] = foo
3 голосов
/ 15 ноября 2011

t = [[0] * 4] * 10000 работает, но, вероятно, не делает то, что вы ожидаете. Вместо создания списка из 10000 списков, он создаст список из 10000 ссылок на одиночный список. Посмотрите, что происходит, когда вы пытаетесь начать изменять элементы внутренних списков:

>>> t = [[0] * 4] * 3
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

Вместо этого вы, вероятно, ожидаете следующее:

>>> t = [[0] * 4 for _ in xrange(3)]
>>> t
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> t[0][0] = 1
>>> t
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Причина в том, что умножение списка просто создает более длинный список с несколькими ссылками на элементы внутри исходного списка. Это почти никогда не является хорошей идеей, если вы не знаете список содержит полностью неизменные объекты (такие как числа и строки); вот почему все еще можно использовать умножение списка в [0] * 4 в моей версии ответа, хотя умножение внешнего списка в [[0] * 4] * 10000 опасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...