Есть ли в Python эквивалент оператора Perl x (повторяющаяся строка)?

В Perl я могу реплицировать строки с помощью оператора "x":

$str = "x" x 5;

Можно ли сделать что-то подобное в Python?

Ответ 1

>>> "blah" * 5
'blahblahblahblahblah'

Ответ 3

В Perl (man perlop) x называется repetition operator.
В Python 3 этот * также называется как repetition operator.
В Python 2 это, вероятно, называется тем же, но я только обнаружил, что он упоминается как как sequence repetition в встроенных операторах.

Я считаю важным отвлечься от Strings, поскольку это не единственное, для чего предназначен оператор; вот еще несколько:

  • Струны (хорошо, да)
    • Perl "ab"x5 для производства "ababababab"
    • Python "ab"*5 для того же.
  • Списки
    • Perl @ones = (1) x @ones назначает каждый элемент массива & не переназначает ссылку.
    • Python ones = [1] * len(ones) похож на тот же результат, но переназначает ссылку.
  • Списки списков:
    • Perl (0)x5 для производства ((0),(0),(0),(0),(0)).
    • Почти Python: [[0]]*5 - это [[0],[0],[0],[0],[0]]
  • Dicts/Hashes:
    • Perl: кажется, что он не поддерживается хэшем. Вам нужно конвертировать в списки и обратно.
    • Python: также, похоже, не поддерживается по требованию.

Однако, как следует из "почти" выше, в 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