Python 如果乘以负值,列表或元组如何变为空?

Python 如果乘以负值,列表或元组如何变为空?,python,python-3.x,list,Python,Python 3.x,List,如果乘以负值,列表或元组如何变为空 例如: >>> b = [1,2,3] * 2 >>> b [1, 2, 3, 1, 2, 3] >>> c = [1,2,3] * -1 >>> c [] >>> d = [1,2,3] * -2 >>> d [] 这种行为被记录在案: 在后一种情况下,执行序列重复负重复因子产生空序列 我的 所以它这样做是因为这是记录在案的行为。它可能只是调用列表中

如果乘以负值,列表或元组如何变为空

例如:

>>> b = [1,2,3] * 2
>>> b
[1, 2, 3, 1, 2, 3]
>>> c = [1,2,3] * -1
>>> c
[]
>>> d = [1,2,3] * -2
>>> d
[]

这种行为被记录在案:

在后一种情况下,执行序列重复负重复因子产生空序列

我的


所以它这样做是因为这是记录在案的行为。它可能只是调用列表中的
clear
,或者执行类似的操作

让我举个例子来解释一下

如果将列表[1,2,3]乘以3(例如),则表示新列表的大小与原始列表乘以3的大小相同。因此,在本例中,列表的元素数为9。请注意,列表中有3份相同元素的副本

c = [1,2,4] *3
print(c)
[1,2,4,1,2,4,1,2,4]
现在,如果你将列表乘以一个负数,那么这意味着列表中有负数的元素。也就是说,列表中没有元素

c = [1,2,4] *3
print(c)
[1,2,4,1,2,4,1,2,4]
希望这对您有所帮助。

文档 正如人们在我前面回答的那样,Python的标准行为定义在:

在后一种情况下,执行序列重复;负重复因子产生空序列


源代码 如果您想知道为什么会发生这种情况,可以按照CPython的源代码进行操作:

从中的代码开始:

然后,关于:

静态PySequenceMethods将\u列为\u序列={
...
(ssizeargfunc)列表重复,/*sq\u重复*/
...
}
跳转到:

静态PyObject*
列表重复(PyListObject*a,Py\u ssize\n)
{
...
if(n<0)
n=0;
...
如果(大小==0)
返回PyList_New(0);
...
}

很有趣,但你必须问问自己,重复负时间是什么意思……是的,乘以-1时间只会删除它,然后它就空了。。