YouTube

Got a YouTube account?

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

Japanese subtitles

← 18-37 Empty Hash Table Solution

18-37 Empty Hash Table Solution

Get Embed Code
2 Languages

Showing Revision 1 created 07/21/2014 by osawakjvta.

  1. これがmake_hashtableを定義する1つの方法です
    まず変数i=0に設定します
  2. バケット数をカウントする必要があります
    空のtableを作成することから始めます
  3. nbucketsつまりバケット数を
    tableに追加したいので
  4. whileループを使用して
    iがバケット数より少ない間ループを行います
  5. ループを行う必要があるたびに空のバケットを
    ハッシュテーブルに追加する必要があります
  6. appendを使用して行います
  7. それにより新たな空のバケットを追加します
  8. 延々とループを継続しないように
    iを増やすことを忘れてはいけません
  9. このループをnbucketsの回数行い
    そのつど空のバケットをtableに追加します
  10. そして最後にtableを返す必要があります
  11. これをPythonインタプリタで試してみましょう
  12. これがちょうど読み出したコードです
  13. make_hashtableの結果を表示させます
  14. 表示のためにバケット数を少なくします
  15. 実際には3バケットより
    はるかに多いバケットを持つ必要があります
  16. 実行します
  17. 要素として3つの空のリストがあるリストを
    取得しました
  18. 機能していますが
    必要以上に多くのコードがあるように見えます
  19. 確かに不要なコードがあります
    これをよくする方法があります
  20. forループを使用することです
    forループの一般的な構造は学習しました
  21. コレクションがリストになる構造を持ったループを
    学習しました 文字列にもなります
  22. forループを実装するために
    ループするオブジェクトがいくつか必要です
  23. ここで行いたいことは
  24. ゼロからnbucketsマイナス1の数値の間で
    ループすることです
  25. この値を含むリストを作成する必要があります
  26. make_hashtableのような関数が
    定義できるようにリストを持つことです
  27. これはゼロからnbucketsマイナス1の数値になります
  28. Pythonにはこれを簡単に行う方法があります
    rangeと呼ばれるものです
  29. rangeは入力として2つの数値を使います
    開始と停止の数値です
  30. 出力するものは開始から停止マイナス1までの
    すべての数値のリストです
  31. これがrangeが出力するものです
    開始から始まる数値のリストで
  32. 停止マイナス1に達するまで1を増やします
  33. リストの2つ目のパラメータである渡した値が
    含まれていないことに注意してください
  34. 要素を1つ1つ調べる際
    たいてい最後の要素を含む必要がないので便利です
  35. つまり何かを評価する場合
    例えばrange(0,10)としましょう
  36. 結果はリストゼロから9までとなります
  37. これでrangeが分かりました
    このループを変更します
  38. whileループを置く代わりにforループを行います
  39. forループを使うのは2つの理由があります
    1つはコードを短くできるからです
  40. 一般的にコードを短くすることはよいことです
  41. 2つ目は変数を増やすことを忘れる
    危険性がなくなることです
  42. これはよくやる間違いで
    変数を増やすことを忘れると永遠にループし続けます
  43. ですからforループでwhileループを書くのは
    一般的によい考えです
  44. make_hashtableを定義するよい方法は
    forループを使用することです
  45. 変数iはもう必要ありませんがtableはまだ必要です
  46. whileループを使用する代わりに
    forループを使用します
  47. 変数名を空白にしておきあとで何を置くか考えます
  48. ループするのはゼロからnbucketsまでの範囲です
  49. nbucketsまでの範囲とリストの要素を
    1つずつ調べる必要があります
  50. ゼロからnbucketsマイナス1までの
    数値のリストになります
  51. その数値の1つ1つで以前行ったように
    新しいバケットをテーブルにappendします
  52. iを増やす必要はありません 変数iは現在ありません
  53. そしてループの終わりで前回のように
    テーブルを返します
  54. このループではここに変数は必要ありませんね
  55. 内部に変数は使いません
  56. forループのこのインデックスにはまだ何か必要です
  57. 変数unusedを呼び出します
    分かりやすいように名前をつけています
  58. 本体には使用しません
  59. これでコードをとても小さくできます
  60. 以前のものと同じように機能するでしょう
  61. これが新しいコードです
    以前のものより数行短くなっていますが
  62. まったく同じことを行います
  63. もっと短くする方法を考えついたかもしれませんが
  64. make_hashtableの定義にはうまくいきません
  65. 短くする方法で時間演算子が
    リストに作用することが推測できます
  66. 同じように文字列にも作用します
  67. 空のリストを作成しそれにnbucketsをかけます
  68. すばらしいですね たった1行で済みました
  69. とても明確で理解しやすいです
    ほぼ機能しているように見えます
  70. これをPythonインタプリタで試します
    機能しているようです
  71. ハッシュテーブルと
    3つの空のバケットのリストが得られました
  72. この手法には大きな問題が1つあります
  73. それが何かヒントを与えます
    理由を解明できるか小テストを行います
  74. ですから結果をただ表示するのではなく
    それにtableと呼ぶ変数を代入します
  75. 何かをハッシュテーブルに加えると
    何が起きるのか模倣してみます
  76. バケットの1つに何か追加します
    バケット1を選びましょう
  77. そして1つのURLとudacityのエントリを追加します
  78. そのバケットに何があるのか表示します
    すべて順調なように見えます
  79. バケットゼロには何があるのでしょう
  80. 同じ結果になりました
    何が誤りだったのか考えてください
  81. make_hashtableにシンプルな定義が
    なぜ機能しないのか
  82. その理由を小テストで確認します