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

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

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

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

for循环:

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

输出:for循环:

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

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

wooyq4lh

wooyq4lh1#

如果你想随机删除

  1. days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
  2. from random import randrange
  3. while len(days) > 0:
  4. index=randrange(0,len(days))
  5. days.pop(index)
  6. print(days)
  7. print('End')
nlejzf6q

nlejzf6q2#

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

  1. while days:
  2. day = days.pop(0)

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

ccrfmcuu

ccrfmcuu3#

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

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

相关问题