【问题标题】:I don't understand how they are initializing current solution. Could someone explain what this does?我不明白他们如何初始化当前的解决方案。有人可以解释这是做什么的吗?
【发布时间】:2020-05-04 17:48:05
【问题描述】:

我不明白布尔值如何乘以长度。我对编码很陌生

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

【问题讨论】:

  • 你试过并打印了吗?
  • 它乘以包含一个布尔值的列表,而不是乘以布尔值。
  • [False] 不是布尔值,它是一个列表(其唯一的元素恰好是布尔值)。
  • 如果项目是可变的,你可以小心使用。情况并非如此,但如果您执行a=[[True, False, False]] * 5 之类的操作并尝试编写a[0][1] = False,您可能会得到意想不到的结果...

标签: python initialization boolean init self


【解决方案1】:

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

例子

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

【讨论】:

    【解决方案2】:

    当你将一个列表乘以 N 时,它实际上创建了一个由 N 个原始列表组成的新列表。

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

    [1, 2, 3] * 2
    

    我们将得到以下列表:

    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    

    所以执行 [False]*len(items) 实际上会创建一个包含 len(items) 的 len 的列表,其中每个都是 False。

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

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

    【讨论】:

    • [False for _ in range(len(items))] 做同样的事情只是因为 False 是不可变的。列表推导多次评估 False 语句,而 [False]*n 在列表中返回 n 个 False 副本。
    • 我不是 100% 确定,但我认为 [False]*n 创建了一个包含 1 个 False 的列表,然后销毁它并创建大小为 N 的新列表。 [False for _ in range(len(items))],IMO,为 N Falses 创建一个惰性生成器,然后从中创建一个列表。因此,我认为我建议的方式可能会更快。如果我错了,请纠正我:)
    猜你喜欢
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多