abc = [0, ] * datalen;
"datalen" - это Integer.
datalen
Integer
Тогда я вижу ссылки так:
abc[-1]
Есть идеи?
создает список с datalen ссылками на объект 0:
0
>>> datalen = 10 >>> print [0,] * datalen [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Вам не нужна запятая там:
>>> print [0] * datalen [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Как и все остальные, [0] * n выдаст вам список из n нулей, а индексирование отрицательными числами с помощью [-k] даст k-й элемент в конце, например:
a[-1]
дает последний элемент последовательности и
a[-3]
дает третий последний элемент последовательности.
В дополнение к сказанному помните, что такое поведение ожидается при копировании изменяемых объектов Классическая ловушка для новых программистов на Python
>>> bc = [0,] * 5 >>> bc [0, 0, 0, 0, 0] >>> bc[2]=4 >>> bc [0, 0, 4, 0, 0] >>> bb = [{}, ]*5 >>> bb [{}, {}, {}, {}, {}] >>> bb[2]["hello"]="hi" >>> bb [{'hello': 'hi'}, {'hello': 'hi'}, {'hello': 'hi'}, {'hello': 'hi'}, {'hello': 'hi'}] >>>
При использовании в этом контексте * является оператором «повторения последовательности».
*
>>> datalen = 3 >>> abc = [0,] * datalen [0, 0, 0]
В этом случае, похоже, что он используется как способ создания массива с datalen элементами, каждый из которых инициализируется нулем.
Это работает и для строк (поскольку они также являются последовательностями):
>>> 'String' * 3 'StringStringString'
создает список с нулевым числом данных
>>> datalen=5 >>> abc = [0, ] * datalen >>> abc [0, 0, 0, 0, 0]