下面的代码不应该打印吗?100 100
price = 100 # assigns 'price' reference to 100
price = [price] # creates a 'price' list with 1 element: [100]
for i in range(1, 3):
print(price[0]) # prints 100
price[i] = price[i - 1]
price.append(price[i])
print(price[i])
在第price[i] = price[i - 1]
行获取IndexError: list assignment index out of range
错误,但前面的行成功打印了100
。price[i]不应该只是获得指定的price[0]值吗?你知道吗
如果您只是尝试附加到列表中,那么尝试使用索引执行此操作将不会完全起作用,因为该索引不在列表中:
所以就用
append
问题是,您分配的索引对于数组的长度来说太大了。你知道吗
这会将i初始化为1。由于数组是零索引的,并且数组的长度在第一次遍历时是1,因此您将在您提到的行中找到一个
assignment out of range error
(当i=1
)。你知道吗下面是一个显示问题的最小示例:
您正在尝试将项附加到列表中,或者更准确地说是使用某个内容的重复副本初始化列表。以下是一些Python式的方法:
它们都比(重复地)做
append()
要快,这是O(N),所以重复做append()
是长列表上的O(N^2),这会变得非常慢。你知道吗(顺便说一句,如果你事先知道列表至少有N个元素,并且N很大,你可以将它初始化为
price = [None] * N
,然后得到[None, None, None...]
。现在你可以直接分配给他们。但是,对于初学者来说,显式地执行append是更好的练习。)相关问题 更多 >
编程相关推荐