0
def count_chars(s):
    '''Return a dict that contains each character in str s as a key. The
    value associated with each key is the number of times that character
    occurs in s.'''

    d = {}
    for ch in s:
       if ch in d:
          d[ch] += 1
       else:
          d[ch] = 1
    return d

コードの3行目、「ifchind」が表示されません。まだ辞書にエントリがないのに、なぜそのキャラクターが辞書に載っているのですか?

また、d [ch] + = 1が何を意味するのか、そしてなぜelseステートメントがあるのか​​わかりません。誰か助けてくれませんか?

4

4 に答える 4

2

このようなコードを理解する最も簡単な方法は、printsを追加して、実際に何が行われているかを確認することです。それで、

def count_chars(s):
    '''Return a dict that contains each character in str s as a key. The
    value associated with each key is the number of times that character
    occurs in s.'''

    d = {}
    for ch in s:
       if ch in d:
          print('{} is in d'.format(ch))
          d[ch] += 1
       else:
          print('{} is NOT in d'.format(ch))
          d[ch] = 1
      print('d is now: {}'.format(d))
    return d

count_chars('abcdaaaa')

あなたに言う:

a is NOT in d
d is now: {'a': 1}
b is NOT in d
d is now: {'a': 1, 'b': 1}
c is NOT in d
d is now: {'a': 1, 'c': 1, 'b': 1}
d is NOT in d
d is now: {'a': 1, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 2, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 3, 'c': 1, 'b': 1, 'd': 1}
a is in d
d is now: {'a': 4, 'c': 1, 'b': 1, 'd': 1}
{'a': 4, 'c': 1, 'b': 1, 'd': 1}
于 2012-04-23T02:29:17.493 に答える
1

ループを通過するたびに、辞書のキーを追加または更新しているためです。キーがすでに存在する場合は、その値を更新しています。

于 2012-04-23T02:16:32.860 に答える
1

他の多くのスクリプト言語とは異なり、Pythonは要素を自動作成しません。ドキュメントには、getdefault()メソッドとsetdefault()メソッドがあります。これらは、このような状況で役立ちます。このスレッドで説明されているように、dictをサブクラス化することもできます。

于 2012-04-23T02:19:40.840 に答える
1

コードの3行目、「ifchind」が表示されません。

それはまさにそれが言うことを意味します:それはにあるかどうかchをチェックしdます。

まだ辞書にエントリがないのに、なぜそのキャラクターが辞書に載っているのですか?

かもしれないので、最終的に。コードはforループ内にあり、ループのポイントは、コードが何度も実行されるように調整することです。これらの実行のいくつかは、物事を辞書に入れます。

また、d [ch] +=1が何を意味するのかわかりません

それは、言語リファレンスがそれが意味すると言っていることを意味します。

そして、なぜelseステートメントがあるのか​​。

条件が真でないときにやりたいことがあるし、真のときにやりたいことがあるからです。

于 2012-04-23T03:04:08.197 に答える