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

xzabzqsa  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(396)

我一直在尝试使用while循环和for循环从列表中删除随机项。对于while循环,它应该将其打印到控制台,直到列表days为空。
这是到目前为止我的代码-
while循环:

days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']

while len(days) > 0:
    days = days.pop(0)

for循环:

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

输出:for循环:

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

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

wooyq4lh

wooyq4lh1#

如果你想随机删除

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')
nlejzf6q

nlejzf6q2#

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

while days:
    day = days.pop(0)

这个 for 循环不是好的做法。在遍历列表时修改列表是很危险的。好好想想。第一次通过循环,“天”是0。您弹出元素0。现在,以前是[1]的元素在[0]槽中,但是当您再次循环时, day 将为1,并且您的编号已关闭。
同样,您正在覆盖循环变量( day )和流行音乐的结果。小心你的变量名。

ccrfmcuu

ccrfmcuu3#

要随机删除,可以使用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))

相关问题