如何一一删除列表中的所有项目并在删除后同时打印它们

时间:2019-08-20 04:53:04

标签: python

我试图一个一个地删除列表中的元素,并且我想在删除相同的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')

我希望删除该元素后再打印该元素,直到完成所有元素的删除为止。

4 个答案:

答案 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]