[英]Python - how to randomly remove an item from the list until list is empty using both a while-loop and for-loop
我一直在尝试使用 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)
output:for循环:
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
循环不是一个好习惯。 在迭代列表时修改列表是危险的。 想想看。 第一次循环,“day”是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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.