【问题标题】:Why does n times the empty list in python return the empty list instead of zero or n or n empty lists?为什么python中的n次空列表返回空列表而不是零或n或n个空列表?
【发布时间】:2015-01-27 11:03:33
【问题描述】:

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

代码如下:

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]

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

【问题讨论】:

  • 简单地认为当你乘以null时你会得到wt??

标签: python list default-value


【解决方案1】:

乘以一个列表会导致它重复内容。空列表没有可重复的内容。

来自Sequences Types documentation

s * nn * s
ns 的浅拷贝连接

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

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

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

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

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

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

【讨论】:

    【解决方案2】:
    []
    

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

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

    将“无”乘以任何数字将得到“无”。

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2014-07-20
      相关资源
      最近更新 更多