Python:为什么我不能从列表中弹出一个值?
我不确定这里到底发生了什么。我尽量说得具体一些。有人能告诉我为什么这不起作用吗?当我试图从循环中显示在一个列表中的项目弹出时,我得到了一个弹出索引超出范围的错误。我在大学里学的。非常感谢。我真的希望这不是一个愚蠢的问题。输出如下Python:为什么我不能从列表中弹出一个值?,python,list,python-3.x,Python,List,Python 3.x,我不确定这里到底发生了什么。我尽量说得具体一些。有人能告诉我为什么这不起作用吗?当我试图从循环中显示在一个列表中的项目弹出时,我得到了一个弹出索引超出范围的错误。我在大学里学的。非常感谢。我真的希望这不是一个愚蠢的问题。输出如下 def k_largest(a_list,k): compare_list =[] a_list.sort() #print(a_list) for item in a_list: assert(type(item)
def k_largest(a_list,k):
compare_list =[]
a_list.sort()
#print(a_list)
for item in a_list:
assert(type(item)==int) #the list can only contain integers
if item in compare_list and item in a_list:
print("pop a_list " + str(item))
print(a_list)
a_list.pop(item)
else:
if item not in compare_list:
print("compare append " + str(item))
compare_list.append(item)
#print(a_list)
#print(len(a_list))
return a_list[len(a_list)-k]
import random
a=[]
for x in range(1,10):
a.append(random.randint(0,100))
print (a)
k_largest(a,3)
输出:
[38, 38, 25, 25, 7, 60, 5, 35, 97]
compare append 5
compare append 7
compare append 25
pop a_list 25
[5, 7, 25, 25, 35, 38, 38, 60, 97]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-141-a73ef6b20848> in <module>()
4 a.append(random.randint(0,100))
5 print (a)
----> 6 k_largest(a,3)
<ipython-input-137-a9f599ea78c6> in k_largest(a_list, k)
12 print("pop a_list " + str(item))
13 print(a_list)
---> 14 a_list.pop(item)
15 else:
16 if item not in compare_list:
IndexError: pop index out of range
list.pop获取要删除的元素的索引,而不是要删除的项的索引。尝试改用list.remove。如Python文档所述: array.pop[i] 从数组中删除索引为i的项并返回它。这个 可选参数默认为-1,因此默认情况下最后一项为 移除并返回
您需要提到使用array.pop的索引号 pop采用索引,而不是项目。不管怎样,你可能不应该在迭代列表时从列表中弹出东西,它通常以悲伤结束。我同意@tzaman-See。大多数情况下,你可以做一个列表理解来达到同样的效果。谢谢你的耐心和清晰的回答!非常感谢。