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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

609閲覧

複数あるlistの判定について

kentooo

総合スコア10

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/04/26 01:40

各リストの中にひとつでも10以上の数字がある場合はNGを出力するようなコードを書きたいのですが、うまくいきません。
どなたか教えていただければ幸いです。

python

1lists [[1, 3, 5, 9], [3, 7, 11, 13], [1, 2, 5, 6], [3, 4, 11, 18]] 2 3for list in lists: 4 for number in list: 5 if 0 < int(number) <= 10: 6 continue 7 else: 8 print("NG") 9 break 10 print("OK") 11

上記の場合は、
OK
NG
OK
NG
となるようにしたいのですが、NGと出力したあとにOKが出てしまいます。

またこちらのOK, NGの代わりにTrue, Falseを返すことはできますか?
returnを置くとout of functionと出ますため、defで定義しなければいけないのでしょうか?

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

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

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

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

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

guest

回答2

0

2 つの方法を書いてみました。
p.py

python3

1def check_lists(list_ary): 2 for x in sum(list_ary, []): 3 num = int(x) 4 if num < 0 or 10 < num: 5 return "NG" # False 6 return "OK" # True 7 8def check_lists_x(list_ary): 9 return {True} == set([0 < int(x) and int(x) <= 10 for x in sum(list_ary, [])]) 10 11list_ary = [[1, 3, 5, 9], [3, 7, 11, 13], [1, 2, 5, 6], [3, 4, 11, 18]] 12print(check_lists(list_ary)) 13print(check_lists_x(list_ary)) 14 15list_ary = [[1, 3, 5, 9], [3, 7, 1, 3], [1, 2, 5, 6], [3, 4, 1, 8]] 16print(check_lists(list_ary)) 17print(check_lists_x(list_ary))

実行例
イメージ説明

参考情報

  • Python 3 で flatten する方法いろいろ

https://qiita.com/hoto17296/items/e1f80fef8536a0e5e7db

投稿2020/05/03 01:28

katoy

総合スコア22324

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

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

kentooo

2020/05/11 06:48

ありがとうございました!!
guest

0

ベストアンサー

『一つでも条件を満たさなかったらアウト』というコードを組むときに、よく見る手段。

Python

1for list_ in lists: 2 is_ok = True # とりあえずOKにしとく 3 4 for number in list_: 5 if 0 < int(number) <= 10: 6 continue 7 else: 8 is_ok = False # 一つでも満たさなかったら即Falseに 9 break 10 11 is_okが真なら"OK"、偽なら"NG"と出力

またこちらのOK, NGの代わりにTrue, Falseを返すことはできますか?

真偽値さえ固まれば出力は簡単なので、
判定結果をTrue/Falseで受け取る方法を先に考えた方が後々楽です。

returnを置くとout of functionと出ますため、defで定義しなければいけないのでしょうか?

return文は関数内でしか使えません。
これに回答しようとすると『関数とは何ぞや』という話から始めないといけないので、省きます。

その他のアプローチ

簡潔なコードになりそう順です。ただし簡単順ではありません。

  • all関数を利用する
  • 自ら関数を定義し、偽が定まった時点でreturn
  • for-else文を利用し、else節に正常処理を仕込む

もう少しコーディングに慣れてきたら、それぞれ試してみると良いでしょう。

投稿2020/04/26 01:50

編集2020/04/26 01:57
LouiS0616

総合スコア35668

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

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

kentooo

2020/04/26 02:06

ご丁寧に教えていただきありがとうございました。 初めにis_ok = TrueでとりあえずOKにしておくのはとても納得いきました。 アドバイスいただきました別の関数など、今後試してみたいと思います。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問