为什么Python会将[' th',',' th',' th',' th']作为结果' 5 * [' th']'而不是五个名单?

时间:2018-04-15 19:11:02

标签: python list

在Python中,为什么这两个5 * ['th'] and [5 * ' th']给出几乎相同的结果? 这里的问题是为什么5* ['th']列出五次大而不是五个列表的列表。

>>>5 * ['th']
['th', 'th', 'th', 'th', 'th']
>>> [5 * 'th']
['ththththth']

对于5 * [' th'],预期结果是5个列表!

4 个答案:

答案 0 :(得分:7)

  

为什么这些......给出几乎相同的结果?

他们没有。

5 * ['th']

这将生成一个包含单个元素'th'的列表,然后将其乘以5.结果是一个包含该元素的5个副本的列表:

 ['th', 'th', 'th', 'th', 'th']

此列表的长度为5。

[5 * ' th']

这会将字符串' th'连接五次,生成字符串' th th th th th',然后创建一个以该字符串作为唯一元素的列表。

[' th th th th th']

此列表的长度为1。

答案 1 :(得分:2)

因为1)原始表达式几乎相同2)列表和字符串都是迭代的并且在Python中表现得非常相似,所以乘以整数对于列表和字符串非常类似,在保留被乘数的原始类型的意义上,而不是说产生一个元组或原始类型的元素列表。有趣的是,基本的四个ariphmetic运算符中的三个返回与操作数之一相同类型的值,尽管在Python 3中重新定义了即使参数是整数也返回float。

答案 2 :(得分:1)

list对象通过如何实现其list.__mul__list.__imul__方法来定义它所认为的乘法。 Python实现者认为将内容复制N次到一个新列表对列表最有意义 有一个很好的理由 - 他们希望乘法像加法一样工作:

>>> ['th'] * 5
['th', 'th', 'th', 'th', 'th']
>>> ['th'] + ['th'] + ['th'] + ['th'] + ['th']
['th', 'th', 'th', 'th', 'th']

如果你将数字乘以5,你得到的数字是五倍,而不是五个数字。同样,如果将列表乘以5,则会得到一个五倍大的列表,而不是五个列表。

答案 3 :(得分:0)

当我浏览Magnus Lie Hetland的书Beginning Python中的示例程序时,这个问题突然浮现。当我向马格努斯问同样的问题时,我收到的部分答案如下。

*“以产生结果['th','th','th','th','th']的方式处理5 * ['th']的原因是使乘法与如果将数字乘以5,则得到的数字是数字的五倍,而不是五个数字。同样,如果将列表乘以5,则得到的列表是数字的五倍,而不是五个列表。“ *