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

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

新規登録して質問してみよう
ただいま回答率
85.50%
連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Python

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

Q&A

解決済

1回答

4848閲覧

pythonのfor文で inの右に空リストを指定した場合

ys-tombi2

総合スコア23

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Python

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

0グッド

0クリップ

投稿2021/09/15 11:26

疑問点

pythonのfor文でinの右に空リストを指定した場合どんな動きをしますか。

実験

以下のコードで実験してみました。
これでforの中身が一度も実行されず無事、下のprintに到達できれば、for文の前でif文を使ってリストのサイズが正の値であることをたしかめなくてすみますね。、

mylist = [] for x in mylist: print("for文の中身") print("forの次の文")

実験の結果

実験の結果は、一応期待通りでした。エラーにならずprint文に到達しました。

これはまっとうな結果でしょうか

listのサイズが0なら、forの中身を実行しないことは、いつも期待していいのでしょうか。
これが「仕様」であるのなら、forの前でリストのサイズを調べる手間がかなり省ける気がしますが…

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

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

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

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

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

guest

回答1

0

ベストアンサー

listのサイズが0なら、forの中身を実行しないことは、いつも期待していいのでしょうか。

はい。以下抜粋します。

8.3. for 文

全ての要素を使い切ったとき (シーケンスが空であったり、イテレータが StopIteration 例外を送出したときは、即座に)、 else 節があればそれが実行され、ループは終了します。

listのサイズが0、すなわちシーケンスが空である場合は即座にループは終了します。
すなわちループ内の処理は実行されません。

追記

むしろ以下コードで示すような変態クラスも想定するとlenなりでチェックするべきではなく
単純にfor inに任せた方がよいかもしれません。
参考:Pythonはどうやってlen関数で長さを手にいれているの?

Python

1class MyIterator: 2 def __init__(self,obj): 3 self.obj = obj 4 self.c = 0 5 6 # ここが変態 7 def __len__(self): 8 print('__len__') 9 return 0 10 11 def __next__(self): 12 print('__next__') 13 try: 14 r = self.obj[self.c] 15 self.c += 1 16 return r 17 except IndexError: 18 self.c = 0 19 raise StopIteration 20 21 def __iter__(self): 22 print('__iter__') 23 return self 24 25def disp(it): 26 print('disp') 27 for e in it: 28 print(e) 29 30for l in [[],[1,2]]: 31 print(l) 32 it = MyIterator(l) 33 34 print('just disp') 35 disp(it) 36 37 print('check len') 38 if len(it) > 0: 39 disp(it) # 呼ばれない 40 41 print('check if') 42 if it: 43 disp(it)# 呼ばれない 44 45 46""" 47[] 48just disp 49disp 50__iter__ 51__next__ 52check len 53__len__ 54check if 55__len__ 56[1, 2] 57just disp 58disp 59__iter__ 60__next__ 611 62__next__ 632 64__next__ 65check len 66__len__ 67check if 68__len__ 69"""

投稿2021/09/15 11:38

編集2021/09/15 12:07
can110

総合スコア38234

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

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

ys-tombi2

2021/09/15 12:05

回答ありがとうございます。 引用された文の url をおしえていただけるでしょうか。
can110

2021/09/15 12:10 編集

「8.3. for 文」の部分がハイパーリンクになっていませんか?
ys-tombi2

2021/09/15 23:24

ありがとうございました。疑問点がかいけつしました。これからは for 文を書くとき、自信をもってひと手間省けまる。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問