我正在尝试删除最后5个元素,即'%20'从列表arr: -
arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
length = 30
print(length)
print(len(arr))
print(arr)
for x in range(length, len(arr)):
print(arr[x])
for x in range(length, len(arr)):
del arr[x]
print(arr)
但我得到了以下输出。我不明白为什么print(arr[x])
有效但del arr[x]
没有: -
30
35
['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
%20
%20
%20
%20
%20
Traceback (most recent call last):
File "test.py", line 9, in <module>
del arr[x]
IndexError: list assignment index out of range
答案 0 :(得分:2)
索引超出范围,因为如果从原始数组中删除项目,则原始数组的大小会减小。
尝试pop()
删除上一个
arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
length = 30
print(length)
print(len(arr))
print(arr)
for x in range(length, len(arr)):
print(arr[x])
for x in range(length, len(arr)):
arr.pop()
print(arr)
答案 1 :(得分:1)
当您删除每个项目时,列表会变短,因此您的索引会在结束时运行。
您可以使用切片表示法del arr[length:]
,这比pop更快。
答案 2 :(得分:0)
这是因为你正在迭代每次迭代中变化的列表。
<div id='stage' style='height: 160px; width: 180px;'>
<div id='spinner'>
<div style='transform: rotateY(90deg) translateZ(90px); padding: 0 0px; background: red; width: 180px; height: 160px; display: inline-block;' class='rotating'>A</div>
<div style='transform: rotateY(180deg) translateZ(90px); padding: 0 0; background: blue; width: 180px; height: 160px; display: inline-block;'>B</div>
<div style='transform: rotateY(270deg) translateZ(90px); padding: 0 0; background: green; width: 180px; height: 160px; display: inline-block;'>C</div>
<div style='transform: rotateY(360deg) translateZ(90px); padding: 0 0; background: yellow; width: 180px; height: 160px; display: inline-block;' class='rotating'>D</div>
</div>
</div>
pythonic方式:
>>> arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
>>> for x in range(length, y):
del arr[30]
>>> arr
['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a']
答案 3 :(得分:0)
您可以使用del arr[x:]
来解决此error
。
arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
length = 30
print(length)
print(len(arr))
print(arr)
for x in range(length, len(arr)):
print(arr[x])
for x in range(length, len(arr)):
del arr[x:]
print(arr)
答案 4 :(得分:0)
其他答案解释了为什么你得到了错误。这个答案解释了很多更简单的方法来做同样的事情。
如果您知道要删除最后5个元素,只需创建一个省略最后5个元素的切片。
arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
number_to_remove_from_end = 5
arr = arr[:-number_to_remove_from_end]
print(arr)
输出:
['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a']
或者,如果您确实想使用del
关键字来确保列表ID保持不变,那么以下内容将起作用
arr = ['A', 't', 'u', 'l', '%20', 'K', 'r', 'i', 's', 'h', 'n', 'a', '%20', 'P', 'a', 't', 'n', 'a', '%20', 'B', 'i', 'h', 'a', 'r', '%20', 'I', 'n', 'd', 'i', 'a', '%20', '%20', '%20', '%20', '%20']
number_to_remove_from_end = 5
del arr[-number_to_remove_from_end:]
print(arr)