代码之家  ›  专栏  ›  技术社区  ›  nilsinelabore

为什么在python中使用x=list[0:8]创建list是错误的?

  •  -6
  • nilsinelabore  · 技术社区  · 5 年前

    为什么用这个创建一个列表是错误的?

    x = list[0:8]
    

    要在两个值之间创建一个列表,这是唯一的方法吗?

    list(range(0, 8))
    

    谢谢

    4 回复  |  直到 5 年前
        1
  •  0
  •   Ravi Satya Yenugula    5 年前

    @尼尔辛拉布, [x:y] 意思是将列表从索引X切片到Y-1,如果列表存在,则只能对其进行切片。

        2
  •  1
  •   Grismar    5 年前

    这是错误的,因为它没有给你想要的结果。

    如果你写这个:

    x = list[0:8]
    

    您正在告诉Python:调用现有变量 list ,选择第0个元素到第8个元素(即前8个元素,列表从0开始),并将结果赋给变量 x .

    这个 [0:8] 部分被称为“slice”,它适用于可以通过索引访问的许多类型的变量。当你把切片应用到 列表 ,Python将其解释为可索引的,并尝试“切片”它-除非您真正定义了一个名为 列表 ,不建议使用此选项,因为它将 列表 是标准Python的类型。

    你没有告诉Python:生成从0到7的数字,把它变成一个列表,并将结果赋给变量 ,也就是说:

    x = list(range(0, 8))
    

    请注意,这对大多数情况都足够了,但它不会给您一个列表,而是范围本身,因此,如果您确实需要一个列表,请不要这样做:

    x = range(0, 8)
    
        3
  •  1
  •   Ari    5 年前

    试试看:

    x = list[0:8]
    print(x)
    

    结果:

    Traceback (most recent call last):
      File "script.py", line 1, in <module>
        x = list[0:8]
    TypeError: 'type' object is not subscriptable
    

    这是错误的,因为它不起作用。你用 [x:x] 从列表中选择项目片段,而不是生成列表。你可以使用范围,或者使用列表理解。

    x = list(x for x in range(0, 100))
    print(f"There are {len(x)} items in the list")
    

    结果

    "There are 100 items in the list"
    

    把它切成片,最后50个项目, [50:] 表示我们从第50个索引开始,在 : 意思是一直走到最后。相反地你可以做 [:80] 它会从一开始上升到第80个指数,这和 [0:80] .

    half = x[50:]
    print(f"There are {len(half )} items in the list")
    

    结果

    "There are 50 items in the list"
    
        4
  •  0
  •   pennine    5 年前
    x = list[0:8]
    

    使用此语法拼接现有的列表,命名为 list 并将其分配给变量 x ,实际上不会生成新列表。如果你没有 列表 定义了,你会得到一个异常。