为什么在python中空列表的n次返回空列表而不是零或n或n个空列表?

时间:2014-11-28 18:54:04

标签: python list default-value

我正在进行一项权限练习,要求我将列表中的所有元素相乘。我能够使用一个简单的循环来做到这一点。我知道有内置功能可以做到这一点,但我想按照建议进行练习,以便学习材料。

以下是代码:

def product_list(myList):
    product = 1
    for item in myList:
        product = product * item
    return product

对于空列表,返回:

>>>1

这是函数的默认返回值。

我还在python解释器中注意到:

4 * []
>>> []

然而

4 * [1, 2, 3]
>>> [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

这种行为背后的逻辑是什么?

2 个答案:

答案 0 :(得分:2)

乘以列表会使其重复内容。空列表没有要重复的内容。

来自Sequences Types documentation

  

s * nn * s
  n联合的s浅层副本

如果您想重复生成包含引用列表的新列表,请先将其放入另一个列表中:

>>> [[]] * 4
[[], [], [], []]

但考虑到这会创建4个引用,所有引用都指向同一个嵌套列表。然后分享对该列表的操作:

>>> a = []
>>> b = [a] * 4
>>> b
[[], [], [], []]
>>> a.append('foo')
>>> b
[['foo'], ['foo'], ['foo'], ['foo']]

如果您需要单独的副本,请使用列表推导并明确创建副本:

[lstobj[:] for _ in range(4)]

答案 1 :(得分:1)

[]

上面的表达式表示一个空列表,换句话说,它是一个不包含任何内容的列表。乘法表达式的工作原理是将列表中存储的项目序列乘以指定的值:

[1,2,3] * 2
[1,2,3,1,2,3] # output

乘以"没有"任何数字都会给你"没什么"。