Поскольку, как и при умножении целых чисел, повторяется сложение, умножение на lis повторяется при конкатенации.
>>> ['a'] + ['a'] + ['a'] + ['a']
['a', 'a', 'a', 'a']
>>> ['a'] * 4
['a', 'a', 'a', 'a']
>>> 4 * ['a']
['a', 'a', 'a', 'a']
Это также подчиняется другим законам:
- Распределение:
lst * n + lst * m == lst * (n + m)
- Нулевое свойство:
lst * 0 == 0 * lst == []
- Мультипликативная идентичность:
lst * 1 == lst
.
Вышеприведенное также согласуется с пустым списком []
являясь аддитивным тождеством,
['a'] + [] == [] + ['a'] == ['a']
, поскольку
['a'] + [] == ['a'] * 1 + ['a'] * 0 # zero property and multiplicative identity
== ['a'] * (1 + 0) # distribution
== ['a'] * 1 # integer addition
== ['a'] # multiplicative identity
Возможно, list * int
не следует определять в all . Основной вариант использования, чтобы быстро создать список из n
идентичных элементов, более безопасен при использовании списочных представлений (которые были добавлены к языку позже). [x] * n
создает список ссылок на один элемент x
, который обычно не , что вы хотите, если x
является изменяемым. [x for _ in range(n)]
, с другой стороны, создает список независимых объектов, определенных как x
, что равно , что вы хотите, когда x
является изменяемым.