Python-如何使用while循环和for循环从列表中随机删除一个项,直到列表为空



我一直在尝试使用while循环和for循环从列表中删除一个随机项。对于while循环,它应该将其打印到控制台,直到列表days为空。

这是我迄今为止的代码-

while loop:

days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
while len(days) > 0:
days = days.pop(0)

循环:

for day in range(len(days)):
day = days.pop(0)

输出:用于循环:

AttributeError: 'str' object has no attribute 'pop'

我是一个新手程序员,我正在努力纠正这个问题。有没有办法从while循环中弹出项目?有人能解释一下属性错误以及我为什么收到这条消息吗?

如果您想随机删除

days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
from random import randrange
while len(days) > 0:
index=randrange(0,len(days))
days.pop(index)
print(days)
print('End')

您的第一个循环是正确的方法。但是您用第一个元素覆盖了列表。你想要

while days:
day = days.pop(0)

for循环不是很好的做法。在迭代列表时修改列表是很危险的。想想看。第一次循环时,"天";为0。您弹出了元素0。现在,曾经是[1]的元素在[0]槽中,但当您再次循环时,day将是1,并且您的编号已关闭。

再次,您使用pop的结果覆盖循环变量(day(。小心使用变量名。

要随机删除,可以使用numpy生成一个随机数,然后使用.pop((从列表中删除项目并同时打印:

import numpy as np
days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
while days:
index = int(np.round((np.random.rand(1)-0.5)*len(days)))
print(days.pop(index))

最新更新