Python 我不知道';我不明白他们是如何初始化当前解决方案的。有人能解释一下这是怎么回事吗?

Python 我不知道';我不明白他们是如何初始化当前解决方案的。有人能解释一下这是怎么回事吗?,python,initialization,boolean,init,self,Python,Initialization,Boolean,Init,Self,我不明白一个布尔值怎么能乘以一个长度。我对编码相当陌生 def __init__(self, capacity, items): self.currentSolution = [False]*len(items) 符号[value]*number在每个索引处构建一个包含value的列表,长度为number 范例 [False]*2 => [False, False] [False]*10 => [False, False, False, False, False,

我不明白一个布尔值怎么能乘以一个长度。我对编码相当陌生

def __init__(self, capacity, items):
        self.currentSolution = [False]*len(items) 

符号
[value]*number
在每个索引处构建一个包含
value
的列表,长度为
number

范例

[False]*2 => [False, False]
[False]*10 => [False, False, False, False, False, False, False, False, False, False]

当你把一个列表乘以N,它实际上会创建一个由N个原始列表组成的新列表

让我给你举个例子。当我们将使用以下命令时:

[1, 2, 3] * 2
我们将得到以下列表:

[1, 2, 3, 1, 2, 3, 1, 2, 3]
因此,执行[False]*len(items)实际上会创建一个包含len(items)的len的列表,每个len(items)都是False

做同样事情的另一种方法可能是:

[False for _ in range(len(items))]

你试过并打印了吗?它是一个包含一个布尔值的列表的乘法,而不是布尔值的乘法。
[False]
不是布尔值,它是一个列表(其唯一元素恰好是布尔值)。如果项目是可变的,你可以小心使用。情况并非如此,但如果您执行类似于
a=[[True,False,False]]*5
的操作,并尝试编写
a[0][1]=False
您可能会遇到意想不到的结果…
[False for uuuuu in range(len(items))]
也会做同样的事情,因为False是不可变的。列表理解会多次评估
False
语句,而[False]*n会在列表中返回n份
False
。我不是100%确定,但我认为[False]*n会创建一个包含1个False的列表,然后销毁它并创建大小为n的新列表。[[False用于范围内(len(items))],IMO,为N个False创建一个惰性生成器,然后从中创建一个列表。因此,我认为我建议的方法可能更快。如果我错了,请纠正我:)