我正在尝试从列表中删除数字,直到只剩下一个项目。我的for循环遇到了麻烦。它不断给出错误说明:
File "C:/Users/kramsey/Desktop/Python/NumberGuesser2.py", line 28, in <module>
list.remove(B)
ValueError: list.remove(x): x not in list
代码:
B = random.choice(list)
if ready == "ok":
lessthan = input("is your number less than {}".format(B)).strip().lower()
if lessthan == "yes":
for numbers in list:
B = int(B+1)
list.remove(B)
print(list)
我希望它删除不小于random.choice(list)
的数字,而不会在用户点击列表中不包含的整数时向用户显示错误。
它总是告诉用户list.remove(x) not in list
并且不会继续我的for循环。
答案 0 :(得分:0)
让我们将您的问题简化为列表(适当地命名为l
):
l = [1, 3, 4, 6, 7, 9]
和一个随机数(为简单起见,我们将其设置为5
):
B = 5
现在,我们无法迭代l
并从l
中删除项目,因为这会导致我们遇到问题(正如您在错误中看到的那样)。因此,最好的方法是将l
重新定义为使用list-comprehension
制作的新列表。
l = [i for i in l if i > B]
这将l
保留为:
[6, 7, 9]
这是正确的方式,可以执行您想要的操作,并希望您可以将其合并到您的代码中。
答案 1 :(得分:0)
假设您的列表由已排序的数字组成,您必须执行以下操作:
if lessthan == 'yes':
index = len(list) - 1
while list[index] >= B:
list.remove(list[index])
index -= 1
print(list)
请记住,如果您要通过删除/删除元素来更改正在迭代的列表,则应该向后(从列表末尾到开头)。否则,您可以通过删除列表中间的元素来跳过某些元素。