我正在进行一项权限练习,要求我将列表中的所有元素相乘。我能够使用一个简单的循环来做到这一点。我知道有内置功能可以做到这一点,但我想按照建议进行练习,以便学习材料。
以下是代码:
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]
这种行为背后的逻辑是什么?
答案 0 :(得分:2)
乘以列表会使其重复内容。空列表没有要重复的内容。
来自Sequences Types documentation:
s * n
,n * 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
乘以"没有"任何数字都会给你"没什么"。