YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Simplified subtitles

← cs101_unit3_25_s_find-element

dummy description

Get Embed Code
5 Languages

Showing Revision 3 created 08/01/2014 by Fran Ontanaya.

  1. [Evans] 解决这个问题的方法有很多种。
  2. 首先,我们来看看使用while循环的解决方法。
  3. 我们将定义我们的find_element过程。
  4. 我们将用p作为列表的名字,用t作为目标的名字,
  5. 也就是我们想要匹配的元素。
  6. 我们将定义这个循环来遍历p中所有元素,
  7. 这跟我们之前见过的遍历列表的while循环相似。
  8. 我们有一个while循环。我们已经引入了变量i。
  9. 我们将用它作为索引来遍历循环。
  10. while循环停止的条件是当i达到len(p),
  11. 所以我们要让while循环的测试为i < len(p)。
  12. 这个while循环的块中,我们要检查当前元素与t匹配,
  13. 于是我们使用p[i]得到当前元素,接着用==来测试它是否等于t。
  14. 如果我们找到一个匹配,即找到两个相等的值,
  15. 那么我们就要返回找到的索引。
  16. 所以结果应为i的值,
  17. 这就是我们找到匹配元素的索引。
  18. 相对于使用for循环,使用while循环的风险在于
  19. 你很容易忘记你需要增加所以变量。
  20. 如果我们把循环就这样放着,它会永无休止地运行,
  21. 因为如果找不到第一个匹配的元素,i的值就永远不变,
  22. 这样,我们就返回0。
  23. 这个循环会不停继续下去,再次检查第一个元素。
  24. 所以我们需要增加i的值,
  25. 这就是while循环块的结尾。
  26. 我们这样描述find_element过程应做什么,
  27. 如果找不到元素,过程应返回-1。
  28. 如果我们完成了while循环而没有返回,
  29. 这意味着我们已经遍历了while循环所有i的值直至达到len(p) - 1。
  30. 我们没有找到任何匹配的元素,所以我们应返回 -1。
  31. 这就是定义find_element过程的一种方法。
  32. 下面我将向你展示如何使用for循环来定义该过程。
  33. 我们开始思考定义find_element时会更自然地想到使用while循环
  34. 而不是for循环,是因为我们想从find_element返回的值
  35. 是索引本身。
  36. 当使用一个采用标准句法遍历循环中元素的for循环
  37. 我们不追踪索引。
  38. 我们看到的只有依次排列的各个元素。
  39. 所以我们需要添加一些内容来追踪索引,
  40. 因为索引是我们想要返回的值。
  41. 所以我们仍然需要使用一个变量来追踪索引。
  42. 我们将使用i作为变量,正如之前在while循环中的做法。
  43. 现在我们有一个for循环,而不是while循环。
  44. 在这里我们不需要考虑停止条件
  45. 因为它只会遍历所有元素。
  46. 与while循环正文相似,我们检查当前元素是否等于t。
  47. 在这个for循环中,我们可以通过使用变量e来得到当前元素。
  48. 每次我们遍历循环正文时,
  49. 当前元素就是这样被赋值的。
  50. 我们的测试是使用==来比较e和t。
  51. 正如我们之前的while循环的做法,如果它们匹配,我们应返回结果。
  52. 我们想要返回的结果是我们找到匹配的索引。
  53. 在之前的while循环中,这点已经明确了。
  54. 这很好理解,因为我们看的是元素p,索引i。
  55. 在for循环中,我们必须更加注意,要知道那个索引在哪里。
  56. 我们使用变量i来追踪那个索引,所以我们将返回i。
  57. i从0开始。
  58. 每一次遍历循环我们都需要增加i。
  59. 所以,我们在遍历元素时追踪当前索引。
  60. 正如在之前的定义中,我们使用while循环,
  61. 如果到了结尾我们没有找到元素,那就意味着这个元素在p中不存在,
  62. 我们应返回 - 1。
  63. 在这个for循环中,我们同样这么做。