0

我想知道为什么下面的代码要求我们在if语句中输入found = false,然后find = true。

def findinList():
  list = [["Dog" , "der Hund"] , ["Cat" , "die Katze"] , ["Bird" , "der Vogel"]]
  key = "Cat"
  found = false
  for item in list:
    if item[0] == key:
      print item[1]
      found = true
      break
  if not found:
    print "Value not in list"

这是我的(错误)理解。如果 item[0] == key (确实如此),则 if 语句为真。那么它不应该在打印项目后就摆脱它吗?为什么我们需要found = false/true。

当你解释答案时,你能不能用一个非常容易理解的定义来解释它,因为我对这一切都不熟悉,太多的细节会导致我的理解出现轻微的崩溃。

4

4 回答 4

9

您需要该found标志,因为一旦for循环结束,您无法真正判断它是否因为您中断它而停止,或者循环是否因为它循环遍历整个列表而自行停止。

Python 实际上有一种更简洁的方式来使用else块来执行此操作,您可能会发现它更容易理解:

for item in list:
    if item[0] == key:
        print item[1]
        break
else:
    print "Value not in list"

块中的代码else只有在你没有break跳出循环时才会被执行,如果你永远找不到这个词就会发生这种情况。

此外,您在这里拥有的不是字典。这是一个清单。您可能想要使用实际的字典:

words = {
    "dog": "der Hund",
    "cat": "die Katze",
    "bird": "der Vogel"
}

您的代码将变得更加简单:

key = 'dog'

if key in words:
    print words[key]
else:
    print "{} isn't in the dictionary".format(key)
于 2013-06-16T23:03:19.270 回答
4

尝试在没有找到的行的情况下运行代码。您会注意到它具有以下输出:

die Katze
Value not in list

找到的变量用于确保仅在未找到该值时才打印“不在列表中的值”字符串。否则每次都会打印出来。

于 2013-06-16T22:57:14.417 回答
1

这段代码:

 if not found:
    print "Value not in list"

如果您没有设置found为,它将无法工作,如果您一开始没有设置为(或其他一些 false-y 值),True它将找到它时运行。foundFalse

于 2013-06-16T22:57:45.687 回答
0

该代码试图查找单词 Cat 是否是列表“列表”的任何子列表的第一项。它通过首先设置 found = false 然后迭代直到找到一个,然后设置 found = true 来做到这一点。

在 python 中,布尔常量是 True 和 False,而不是 true 和 false,所以我不确定这是否可行。此外,还有一些更好的方法可以解决这个问题,例如:

catLists = [sub_list for sub_list in list if sub_list [0] == 'Cat']

这将返回列表中以 Cat 开头的所有列表。

于 2013-06-16T22:58:48.563 回答