12

在 Perl 中,我可以使用 'x' 运算符复制字符串:

$str = "x" x 5;

我可以在 Python 中做类似的事情吗?

4

3 回答 3

31
>>> "blah" * 5
'blahblahblahblahblah'
于 2009-01-30T20:29:15.390 回答
1

这是对官方 Python3 文档的参考:

https://docs.python.org/3/library/stdtypes.html#string-methods

字符串实现了所有常见的序列操作......

...这导致我们:

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'
于 2015-05-23T06:43:10.823 回答
0

在 Perl ( man perlop)x称为. 在 Python 3中,这也称为. 在 Python 2 中,它可能被称为相同的东西,但我只发现它被称为内置运算符。repetition operator
*repetition operator
sequence repetition

我认为离题很重要,字符串不是操作员的唯一用途。这里还有一些:

  • 字符串(好的,是的)
    • Perl"ab"x5产生"ababababab"
    • Python"ab"*5也一样。
  • 列表
    • Perl@ones = (1) x @ones分配每个数组元素并且不会重新分配引用。
    • Pythonones = [1] * len(ones)看起来像相同的结果,但重新分配了引用。
  • 列表列表:
    • Perl(0)x5来产生((0),(0),(0),(0),(0)).
    • Python,几乎:[[0]]*5 [[0],[0],[0],[0],[0]]
  • 字典/哈希:
    • Perl:似乎不支持散列。您需要转换为列表并返回。
    • Python:dict 似乎也不支持。

然而,正如上面“几乎”所暗示的那样,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
于 2018-12-25T12:03:27.007 回答