是否有Python等效的Perl的x运算符?

时间:2009-01-30 20:27:49

标签: python perl

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

$str = "x" x 5;

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

3 个答案:

答案 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)中,xrepetition operator的{​​{3}}。
在Python 3中,此*也是calledrepetition operator
在Python 2中,它可能被称为同一件事,但在内置操作符下,我只能referred to成为sequence repetition

我认为重要的是,字符串不是操作员要做的唯一事情。还有一些:

  • 字符串(好的,是的)
    • 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]]
  • 点/哈希:
    • 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