В 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