检查完每个选项后,是否可以使我的else语句出现?

时间:2018-07-12 20:25:07

标签: python python-3.x loops if-statement while-loop

我有一个while循环,遍历二维列表,以查看是否可以找到类似的提交内容来删除它。

    i=0

while i <= len(my_list):
    if my_list[i] == userinput:
        del my_list[i]
        print("Entry Removed!")
    else:
        print("This publication does not exist")
    i+=1

我想要的是代码,如果未找到匹配项,则打印消息“此出版物不存在”。但是,现在发生的是,每次比较一个项目时,代码都会打印该句子。

我知道为什么会这样,但是我不知道如何解决。解决此问题的最佳方法是什么?

编辑:将列表名称从“列表”更改为“我的列表”。不好意思,我实际上没有在代码中称呼它,我只是在上载问题时更改了名称,以便于理解。

2 个答案:

答案 0 :(得分:3)

您需要一个布尔值:

i = 0
found = False
while i <= len(list):
    if list[i] == userinput:
        del list[i]
        print("Entry Removed!")
        found = True
    i += 1

if not found:
    print("This publication does not exist")

一些不相关的建议

  • 最好不要将名称list用于变量
  • 在迭代同一列表时不要从列表中删除项目。您可以反向遍历列表:

    i = len(li) - 1
    found = False
    while i >= 0:
        if li[i] == userinput:
            del li[i]
            print("Entry Removed!")
            found = True
        i -= 1
    
    if not found:
        print("This publication does not exist")
    

答案 1 :(得分:0)

Python的while循环具有else子句,如果循环完成而没有中断,则执行else子句:

但是让我们用另一种方式来避免更改正在循环的列表:

list_ = [
    ["a", "b", "c"], 
    ["d", "f", "g"], 
    ["d", "f", "g"], 
    ["h", "i", "j"]
]

userinput = ["z", "z", "z"]
new_list = [x for x in list_ if x != userinput]

if list_ == new_list:
     print("This publication does not exist")

# This publication does not exist

请勿覆盖list关键字。我将其更改为list_,但您可以将其更改为对您的应用程序更有意义的内容。