我试图一个一个地删除列表中的元素,并且我想在删除相同的for循环后打印每个元素。
我尝试使用以下代码删除它们,但它说 'IndexError:列表分配索引超出范围'
usernames = ['yasir', 'anjum', 'moin', 'admin', 'iqbal']
if usernames:
for i in range(0, len(usernames)):
#print (usernames[i]) this is working fine
del (usernames[i])
else:
print('The list is already empty')
我希望删除该元素后再打印该元素,直到完成所有元素的删除为止。
答案 0 :(得分:2)
使用list.pop
方法。
>>> usernames = ['yasir', 'anjum', 'moin', 'admin', 'iqbal']
>>>
>>> while usernames:
... print (usernames.pop())
...
iqbal
admin
moin
anjum
yasir
如果您想保留订单,请反转列表。
答案 1 :(得分:1)
您正在使用0..N-1
的固定循环,其中N
仅计算一次,即第一次进入循环时。但是由于del()
N
(== len(username)
)随循环的每次行程而减少。在某个时候,您到达i >= N
,因此到达IndexError: list index out of range
。
尝试使用此变体:
while usernames:
print(usernames[0])
del(usernames[0])
答案 2 :(得分:0)
del
语句使所有后面的元素移到列表的左侧。这就是为什么您得到IndexError
的原因-当您的循环到达列表的一半时,列表不再足够长!
您可以使用每次删除一个元素
while usernames:
del usernames[0]
如果要在删除 之后输出每个元素,则必须先将其保留在变量中。
while usernames:
name = usernames[0]
del usernames[0]
print(name)
请注意,从列表中删除会有点效率低下,因为列表中的其余元素必须重新编号。
答案 3 :(得分:0)
这用于for循环,效率不高,但可以工作。
usernames = ['yasir', 'anjum', 'moin', 'admin', 'iqbal']
for i in range(len(usernames)):
print(usernames[0])
del usernames[0]