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

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

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

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

Q&A

3回答

736閲覧

何重にもネストされたfor文をPythonicに書く方法を探しています

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2022/01/06 08:39

  • 以下のようなコードは非常に保守性が低いです。もともとのデータ型がイケてないのは分かりますが、map関数などを使って少しでも読みやすく保守性を上げる方法はないでしょうか。

python

1# sample data 2pairList = [["米", "パン"], ["味噌汁", "コーンポタージュ"]] 3dataJson = { 4 "米": ["かに", "フランス"], 5 "味噌汁": ["豚汁", "インディカ"], 6 "パン": ["かに", "フランス"], 7 "コーンポタージュ": ["ポタージュ", "ジャポニカ"], 8} 9# algorithm 10mainDishList = [] 11for i in pairList: 12 if i[0] in dataJson.keys() and i[1] in dataJson.keys(): 13    # この辺りをもう少し組み込み関数などでうまく書きたい 14 for x in dataJson[i[0]]: 15 for y in dataJson[i[1]]: 16 if x[0] == y[0] and x[1] == y[1]: 17 print("ok") 18

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

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

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

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

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

quickquip

2022/01/07 02:13

なにがしたかったか当てるクイズになってますね。
guest

回答3

0

setを使ってみました。
要件がいまいち不明ですが、pairの要素数、dataJsonの値のリストの要素すによらず判定できます。

Python

1# sample data 2pairList = [["米", "パン"], ["味噌汁", "コーンポタージュ"]] 3dataJson = { 4 "米": ["かに", "フランス"], 5 "味噌汁": ["豚汁", "インディカ"], 6 "パン": ["かに", "フランス"], 7 "コーンポタージュ": ["ポタージュ", "ジャポニカ"], 8} 9 10keys = set(dataJson.keys()) 11 12for pair in pairList: 13 print(pair) 14 if not set(pair) - keys: # すべてがdataJsonのキーとして存在 15 # キーに対応する各値のリストがすべて同一か 16 values = set(tuple(dataJson[k]) for k in pair) 17 if len(values) == 1: 18 print('ok')

投稿2022/01/06 09:46

can110

総合スコア38341

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

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

0

何をしたいのかがよくわからないコードです。
ちょっと追加して実行してみました。

python

1>>> pairList = [["米", "パン"], ["味噌汁", "コーンポタージュ"]] 2>>> dataJson = { 3... "米": ["かに", "フランス"], 4... "味噌汁": ["豚汁", "インディカ"], 5... "パン": ["かに", "フラメンコ"], 6... "コーンポタージュ": ["ポタージュ", "ジャポニカ"], 7... } 8>>> 9>>> for i in pairList: 10... if i[0] in dataJson.keys() and i[1] in dataJson.keys(): 11... for x in dataJson[i[0]]: 12... for y in dataJson[i[1]]: 13... if x[0] == y[0] and x[1] == y[1]: 14... print(i, x[0], x[1]) 15... print("ok") 16... 17['米', 'パン'] か に 18ok 19['米', 'パン'] フ ラ 20ok

米はフランスで、パンはフラメンコで違っていますが、OKとなっています。こういう結果を欲しいのでしょうか?

たぶんこうだったのだろうコードを書いてみました。

python

1>>> pairList = [["米", "パン"], ["味噌汁", "コーンポタージュ"]] 2>>> dataJson = { 3... "米": ["かに", "フランス"], 4... "味噌汁": ["豚汁", "インディカ"], 5... "パン": ["かに", "フランス"], 6... "コーンポタージュ": ["ポタージュ", "ジャポニカ"], 7... } 8>>> 9>>> for first, second in pairList: 10... try: 11... if dataJson[first] == dataJson[second]: 12... print(first, second, dataJson[first]) 13... print('ok') 14... except KeyError: 15... pass 16... 17米 パン ['かに', 'フランス'] 18ok

欲しいものがこれでないのであれば、それを日本語で説明してください。

投稿2022/01/06 09:38

ppaul

総合スコア24670

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

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

0

何重にもネストされたfor文をPythonicに書く方法を探しています

itertools.productを使うと多重forループを単一forループに統合できます。

python

1import itertools 2 3for x,y in itertools.product(dataJson[i[0]], dataJson[i[1]]): 4 pass # x,y を使った処理

投稿2022/01/06 09:23

編集2022/01/06 09:35
yohhoy

総合スコア6191

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問