Как выполнить цикл по целому ряду целых чисел, объединив строку, такую как "массив" с повторением цикла, и инициализировать список с помощью полученной строки? Следующая отдельная строка показывает, что я хочу сделать, когда я получаю сообщение об ошибке "Не могу назначить вызов функции".
for i in range(int(nmat)): eval('array'+str(i)) = []
Между тем, еще ниже в коде принят следующий код (при условии, что я прокомментирую предыдущий код, который заставил его бомбить)
eval('array'+str(ct1)).append(array[1:9])
Однако он сообщает мне, что имя 'array0' равно undefined (так как я не знаю, как инициализировать серию списков таким образом). Помощь будет с благодарностью, спасибо.
Вы не должны этого делать.
Вместо того, чтобы иметь множество переменных array i, используйте только один: array
, списка типов. Например, если каждый элемент списка должен быть пустым списком:
array = [[] for i in range(int(nmat))]
Затем вы можете получить доступ к первому элементу с array[0]
, а второй - к array[1]
, а число элементов в array
(int(nmat)
в этом случае) с len(array)
.
mylist = []
for i in range(10):
a = ['array%i' %i]
mylist.append(a)
print mylist
[['array0'], ['array1'], ['array2'], ['array3'], ['array4'], ['array5'], ['array6'], ['array7'], ['array8'], ['array9']]
в одной строке:
mylist = [['array%i' %i] for i in range(10)]
Вы должны быть очень осторожны с умножением списка:
>> array = [[]] * int('3')
>> array
[[], [], []]
>> array[0] = 'imastring'
>> array
['imastring', [], []]
и еще более опасно:
>> array = [[]] * int('3')
>> array[0].append('repeated')
>> array
[['repeated'], ['repeated'], ['repeated']]
array = [] * range(3) Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: can't multiply sequence by non-int of type 'list'