在Perl中,我可以使用'x'运算符复制字符串:
$str = "x" x 5;
我可以在Python中做类似的事吗?
答案 0 :(得分:31)
>>> "blah" * 5
'blahblahblahblahblah'
答案 1 :(得分:1)
以下是对官方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'
答案 2 :(得分:0)
在Perl(man perlop
)中,x
是repetition operator
的{{3}}。
在Python 3中,此*
也是called的repetition operator
。
在Python 2中,它可能被称为同一件事,但在内置操作符下,我只能referred to成为sequence repetition
。
我认为重要的是,字符串不是操作员要做的唯一事情。还有一些:
"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