Как инициализировать серию списков со строками в Python?

1

Как выполнить цикл по целому ряду целых чисел, объединив строку, такую ​​как "массив" с повторением цикла, и инициализировать список с помощью полученной строки? Следующая отдельная строка показывает, что я хочу сделать, когда я получаю сообщение об ошибке "Не могу назначить вызов функции".

for i in range(int(nmat)): eval('array'+str(i)) = []

Между тем, еще ниже в коде принят следующий код (при условии, что я прокомментирую предыдущий код, который заставил его бомбить)

eval('array'+str(ct1)).append(array[1:9])

Однако он сообщает мне, что имя 'array0' равно undefined (так как я не знаю, как инициализировать серию списков таким образом). Помощь будет с благодарностью, спасибо.

Теги:

2 ответа

5

Вы не должны этого делать.

Вместо того, чтобы иметь множество переменных array i, используйте только один: array, списка типов. Например, если каждый элемент списка должен быть пустым списком:

array = [[] for i in range(int(nmat))]

Затем вы можете получить доступ к первому элементу с array[0], а второй - к array[1], а число элементов в array (int(nmat) в этом случае) с len(array).

  • 1
    Ха-ха, по сути, питон мешает мне быть идиотом. В любом случае, то, что вы сказали, имеет больше смысла ... как только мой ум застрял на этом пути, я не мог мыслить нестандартно. Благодарю.
  • 0
    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'
Показать ещё 3 комментария
2
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']]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню