質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1156閲覧

pythonを使ったプログラミングの問題について質問です。

zero1132

総合スコア4

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/07/23 06:27

編集2020/07/23 06:29

pythonを使ったプログラミングの問題について質問です。

[コード]
array = ["HND", "NRT", "KIX", "NGO", "NGO", "NGO", "NGO", "NGO"]
count = {}

for pattern in array:
/ if pattern in count: ...①
/  count[pattern] += 1...②
/ else:
/  count[pattern] = 1...③
/ print(count)

上記のコードについて質問なのですが、countが空状態であるのにcountに値が追加される理屈がわかりません。①のcountは空状態であるはずなのに、①の条件が成立する意味がわかりません。恐らくですが、②と③でcountの辞書に値が追加されているような気がします。

質問
1.countが空状態であるのにcountに値が追加される理屈がわかりません。①のcountは空状態であるはずなのに、①の条件が成立する意味がわかりません。 どういった考え方をするのか教えてください。
2.②と③でcountの辞書に値が追加されているような気がします。この解釈で合っているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、掲題のコードについて、スラッシュを取り除き、実行可能にしたコードが下記となります。

array = ["HND", "NRT", "KIX", "NGO", "NGO", "NGO", "NGO", "NGO"] count = {} for pattern in array: if pattern in count: # ...① count[pattern] += 1 # ...② else: count[pattern] = 1 #...③ print(count)

このコードの実行結果は以下になります。

{'HND': 1} {'HND': 1, 'NRT': 1} {'HND': 1, 'NRT': 1, 'KIX': 1} {'HND': 1, 'NRT': 1, 'KIX': 1, 'NGO': 1} {'HND': 1, 'NRT': 1, 'KIX': 1, 'NGO': 2} {'HND': 1, 'NRT': 1, 'KIX': 1, 'NGO': 3} {'HND': 1, 'NRT': 1, 'KIX': 1, 'NGO': 4} {'HND': 1, 'NRT': 1, 'KIX': 1, 'NGO': 5}

質問1について:

1.countが空状態であるのにcountに値が追加される理屈がわかりません。①のcountは空状態であるはずなのに、①の条件が成立する意味がわかりません。 どういった考え方をするのか教えてください

実行結果の4行目まで(①でarrayから”NGOが取り出されるまで)は、①のif文の結果はFalseとなるため、③にジャンプしています。
そしてforループが回って③にジァンプする都度、辞書countには arrayから取り出された要素をキーとする値が順次格納されます。

1回目→count['HND']=1が実行される。
2回目→count['NRT']=1が実行される。
3回目→count['KIX']=1が実行される。
4回目→count['NGO']=1が実行される。 →この時点でcountの内容は、実行結果4行目のようになる。

そして、forループ5回目以降は、patternとして"NGO"が取り出されます。
この時点で、countのキーの中に"NGO"がすでに含まれているため。①はTrueとなり、②にジャンプすることになります。

投稿2020/07/23 06:56

編集2020/07/23 06:57
patapi

総合スコア820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zero1132

2020/07/23 07:15

理解できました。丁寧な解答ありがとうございました。 また機会があればよろしくお願い致します!
guest

0

ベストアンサー

1.countが空状態であるのにcountに値が追加される理屈がわかりません。
①のcountは空状態であるはずなのに、①の条件が成立する意味がわかりません。
どういった考え方をするのか教えてください。

3 は条件ではありません
if の条件を満たさなかったときには else ブロックが実行されます
else ブロックが実行されると、count は空ではなくなるので、
if の条件を満たす場合も発生します

2.②と③でcountの辞書に値が追加されているような気がします。この解釈で合っているのでしょうか?

2 は該当するキーの値を更新します、追加はしていません
3 はキーと値を追加しています

投稿2020/07/23 06:43

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zero1132

2020/07/23 06:47

なるほど、理解できました。elseで辞書が形成されていくのですね、迅速な解答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問