В Perl я могу реплицировать строки с помощью оператора "x":
$str = "x" x 5;
Можно ли сделать что-то подобное в Python?
В Perl я могу реплицировать строки с помощью оператора "x":
$str = "x" x 5;
Можно ли сделать что-то подобное в Python?
>>> "blah" * 5
'blahblahblahblahblah'
Вот ссылка на официальные документы Python3:
https://docs.python.org/3/library/stdtypes.html#string-methods
Строки реализуют все операции последовательности common...
... что приводит нас к:
https://docs.python.org/3/library/stdtypes.html#typesseq-common
Operation | Result
s * n or n * s | n shallow copies of s concatenated
Пример:
>>> 'a' * 5
'aaaaa'
>>> 5 * 'b'
'bbbbb'
В Perl (man perlop) x называется repetition operator.
В Python 3 этот * также называется как repetition operator.
В Python 2 это, вероятно, называется тем же, но я только обнаружил, что он упоминается как как sequence repetition в встроенных операторах.
Я считаю важным отвлечься от Strings, поскольку это не единственное, для чего предназначен оператор; вот еще несколько:
"ab"x5 для производства "ababababab""ab"*5 для того же.@ones = (1) x @ones назначает каждый элемент массива & не переназначает ссылку.ones = [1] * len(ones) похож на тот же результат, но переназначает ссылку.(0)x5 для производства ((0),(0),(0),(0),(0)).[[0]]*5 - это [[0],[0],[0],[0],[0]]Однако, как следует из "почти" выше, в Python есть предостережение (из документации):
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
Также в Perl я не уверен, где это задокументировано, но пустой список ведет себя немного иначе с оператором, вероятно, потому что он имеет эквивалентность False.
@one=((1))x5;
say(scalar @one); # 5
@arr=(())x5;
say(scalar @arr); # 0