在Perl中,我可以使用'x'运算符复制字符串:
$str = "x" x 5;
我能在Python中做类似的事情吗?
>>> "blah" * 5
'blahblahblahblahblah'
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'
man perlop
)中,x
被称为重复运算符。*
也被称为重复运算符。"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