繁体   English   中英

Python list.remove 未按预期工作

[英]Python list.remove is not working as expected

我有一个从 0 到 100 的数字数组和另一个包含用户必须猜测的数字的变量。 如果用户猜测的数字更低,那么我将删除所有低于该数字的数字。 简而言之,我正在构建二进制搜索算法。

假设用户必须猜测数字 25。他写了 21 作为他的第一个猜测。 如果他试图再次写 21,代码就会崩溃并给我这个错误:

ValueError: list.remove(x): x not in list

这是代码:

import random

    
def binary_search_algo():
    number_to_guess = random.randint(0,100)
    random_number_list = list(range(0,100))
    keep_guessing = True
    print(number_to_guess)
    while(keep_guessing):
        user_guess = int(input('Enter you guess: '))
        if(user_guess < number_to_guess):
            try:
                if(user_guess in random_number_list):
                    print('Too Low')
                    for i in range(user_guess):
                        random_number_list.remove(i+1)
                        print(i)
                else:
                 print('Since your last guess was lower')
                 print('We eliminated every number lower than your previous guess')
                 print('So pick higher number next') 
            except:
                print('Too Low')
        elif user_guess > number_to_guess:
            print('Too High')
        else:
            print('Good job')
            break        


binary_search_algo()    

我试图通过将它放在 try/except 中并向I添加 +1 来修复它,但我认为这不是正确的解决方案。 有什么建议吗?

ValueError: list.remove(x): x not in list

简而言之,这就是说:我无法删除它,因为它不在列表中。 在请求删除之前,您应该检查列表是否包含给定元素,即代替

random_number_list.remove(i+1)

if (i+1) in random_number_list:
    random_number_list.remove(i+1)

在您当前的实现中,您可以使用列表理解来过滤掉较低的值:

random_number_list = [x for x in random_number_list if x >= user_guess]

由于列表是有序的,更有效的解决方案是找到列表中实际数字的 position,并只返回从给定索引开始的切片。

甚至更好——你根本不需要列表random_number_list 您只需要记住number_to_guess下方的最高猜测数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM