Python中是否有类似Perl的x操作符(复制字符串)的等价物?

13

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

$str = "x" x 5;

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


3个回答

31
>>> "blah" * 5
'blahblahblahblahblah'

1
@S.Lott:非常正确。SO正在迅速成为懒惰程序员阅读任何文档的替代品。 - davidavr
1
愚蠢的程序员回答愚蠢的编程问题。现在,通过搜索“python equivalent perl x”,可以找到此页面,然后是Dustin的friendfeed,之后就没有了。我找不到正确的文档搜索词。 - Mat
4
我注意到我在提出一些简单问题时,获得的声望分比那些需要更多思考的复杂问题要多。我猜这只是声望系统的一个缺陷。 - Mat
@davidavr好消息,即使是那些查阅手册、研究字符串库文档的人也找不到这个功能。因为它并没有在字符串文档中。它也没有出现在与字符串文档相关的任何地方。事实上,据我所知,它在文档中根本找不到。“玩弄解释器”不能替代对一个功能进行文档化。 - Robert P
在过去的9年中,尽管有很多抱怨,但只有一次尝试提供“不懒惰”的答案...是挺有趣的。是的,我本可以编辑你的回答... - dlamblin
显示剩余4条评论

1

0
在Perl(man perlop)中,x被称为重复运算符
在Python 3中,*也被称为重复运算符
在Python 2中,它可能被称为相同的东西,但我只发现它是内置操作符下的序列重复
我认为强调字符串不是唯一可以使用该运算符的东西很重要;以下还有一些其他用途:
  • 字符串(好的,没问题)
    • 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接