2017-05-03 14 views
-3

文字列 'Hello World'が存在し、辞書を使用して要素とその頻度のマッピングを取得するとします。この次のコードで十分ですが、リストの理解、どうすれば 'if'、 'else'を使うことができますか? set(s)が一意のセットですif-elseを簡潔なリストの理解に変換する

s = 'Hello world' 
d = {char: s.count(char) for char in set(s)} 

:あなたのソリューション

for i in s: 
    if i in d: 
     d[i]=d[i]+1 
    else: 
     d[i]=1 
+0

さらに簡潔に: 'collections.Counter'または' collections.defaultdict(int) 'を使用してください –

+0

あなたは入力要素からリストを構築していません。あなたはあなたの要素を数えています**。 'Counter()'を使います。 –

+0

私はそれをリストの理解にも変換する方法を見ています。そのためにあなたの解決策を提供してください。私は後で代替案を見ることができます –

答えて

1

を提供してくださいあなたは辞書理解を(それは辞書を構築するために、リストの内包表記を使用しても意味がありません)を使用することができますあなたの文字列中の文字を読み、その文字をキーとし、出現回数(str.countを使用)を値として辞書を作成します。

しかし、あなたは全く理解する必要はありませんが、pythonには "電池が含まれています"が付属しています。この場合、バッテリーはcollections.Counterです:

場合
import collections 
collections.Counter(s) 

あなたが本当に(私の個人的な意見:そうしないといけない!)リストの内包表記を使用したいあなたがで作業する必要があります例えば副作用、:

s = 'Hello world' 
d = {} 
[d.__setitem__(i, d[i]+1) if i in d else d.__setitem__(i, 1) for i in s] 
print(d) 

d[i] = 1又はd[i] = d[i] + 1が内包で禁止割り当て、従ってあるので__setitem__コールが必要です。しかし、__setitem__は機能的な代替手段です。

+0

オンポイント!リストの理解の中でif-elseを扱うことについてのあなたの見解を提供できますか? –

+0

@AshwinV "if"と "else"を含むリストの理解の例を追加しました。ループと同じですが、副作用に基づいています。知的運動としては楽しいですが、通常は自分の副作用のために理解してはいけません。 – MSeifert

+1

もちろん、ここのリストコンパイルは非常に多くのレベルで間違っています...だからやってはいけません:) –

関連する問題