如何在不遍历列表中的所有项目的情况下创建 else 语句

How to make an else statement without looping through all items in the list

提问人:Wyatt C 提问时间:10/27/2023 最后编辑:Ken WhiteWyatt C 更新时间:11/2/2023 访问量:53

问:

我试图弄清楚如何在搜索带有 for 循环的词典列表后打印一个语句“找不到书”。但它为每本书打印出“未找到的书”,而这不是我要找的书。

这是相关代码

 for item in books_sorted:
     if item["title"] == search:
         print(item.get("title"), ",", item.get("author"))
         print("This book is in the collection")
     else:
         print("Book not found")`

我尝试将其格式化为(对于项目中的项目),并尝试在循环外编写异常。我尝试添加另一个 if 项目不在语句中。但我想不通。

python-3.x 列表 字典

评论

0赞 Chukwujiobi Canon 10/28/2023
books_sorted 是一个词典列表,你想要词典,其中 item[“title”] == search?

答:

0赞 Chukwujiobi Canon 10/28/2023 #1

问题出在这一行

else:
     print("Book not found")`

在循环的每次迭代中,如果

if item["title"] == search:

不计算为 ,则运行语句。Trueelse

请尝试以下操作:

books_sorted: list[dict] = •••
search = •••

did_find: bool = False

for item in books_sorted:
    if item.get("title") == search:
         did_find = True
         print(“Title: ”, searchedValue.get("title"), "\n", “Author: ”, searchedValue.get("author"))
         print("This book is in the collection")
         break


if not did_find:
    print("Book not found")

复杂度:列表长度中的 O(n)。
例外:无。 用于避免例外。
dict.get()KeyError

假设是 和 是明确定义的。books_sortedsearch

0赞 Suramuthu R 10/28/2023 #2

因为,您已经在 for 循环中给出了 print('Book not found')。因此,它会检查列表中每本书的标题,如果标题不匹配,则给出输出;未找到书'。这里上面的 print 语句应该在 for 循环完成后给出。为了实现这一点,我们可以声明一个值为 0(或 False)的变量,如果找到特定的书,则可以将值更改为 1(或 True)。就这么简单:

c = 0 
for item in books_sorted:
    if item["title"] == search:
        c = 1
        print(item.get("title"), ",", item.get("author"))
        print("This book is in the collection")
        break
if c == 0:
    print("Book not found")`
0赞 Alex Nea Kameni 10/28/2023 #3

一种方法是使用标志,如果找不到,则在循环末尾打印。book_found

search = "Your Search Query"  # Replace with the book title you are searching for
book_found = False

for item in books_sorted:
    if item["title"] == search:
        print(item.get("title"), ",", item.get("author"))
        print("This book is in the collection")
        book_found = True
        break  # Exit the loop once a matching book is found

if not book_found:
    print("Book not found")

另一种方法是在 tile==search 上过滤您的列表,如果结果列表为空,则打印未找到。