Что означает эта строка Python? - PullRequest
2 голосов
/ 08 апреля 2010
abc = [0, ] * datalen;

"datalen" - это Integer.

Тогда я вижу ссылки так:

abc[-1]

Есть идеи?

Ответы [ 5 ]

8 голосов
/ 08 апреля 2010

создает список с datalen ссылками на объект 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]
5 голосов
/ 08 апреля 2010

Как и все остальные, [0] * n выдаст вам список из n нулей, а индексирование отрицательными числами с помощью [-k] даст k-й элемент в конце, например:


a[-1]

дает последний элемент последовательности и


a[-3]

дает третий последний элемент последовательности.

3 голосов
/ 08 апреля 2010

В дополнение к сказанному помните, что такое поведение ожидается при копировании изменяемых объектов Классическая ловушка для новых программистов на 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'}]
>>> 
1 голос
/ 08 апреля 2010

При использовании в этом контексте * является оператором «повторения последовательности».

>>> datalen = 3
>>> abc = [0,] * datalen
[0, 0, 0]

В этом случае, похоже, что он используется как способ создания массива с datalen элементами, каждый из которых инициализируется нулем.

Это работает и для строк (поскольку они также являются последовательностями):

>>> 'String' * 3
'StringStringString'
0 голосов
/ 08 апреля 2010

создает список с нулевым числом данных

>>> datalen=5
>>> abc = [0, ] * datalen
>>> abc
[0, 0, 0, 0, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...