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

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

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

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

Python

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

Q&A

解決済

3回答

5283閲覧

Python , for i in range(len(変数)):の"i"の値について

tatuya.donnan

総合スコア7

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2020/10/08 02:28

下記プログラムの内容でiへの代入をrange(len(x))とした場合に、"i"の値は"x"の値の数になるので、
x = [1,2,3,4,5] #i=5
x = [1,2,3] #i=3
x = [1] #i=1
x = [] #i=0
x = [] #i=0
このような動きになると思っているんですが

プログラムの内容
x = [1,2,3,4,5]
for i in range(len(x)):
print(i,x)
x = x[:-2]

出力結果(i,x)
0 [1, 2, 3, 4, 5]
1 [1, 2, 3]
2 [1]
3 []
4 []

となり"i"の値は"0,1,2,3,4"と増えていっているのですが理由がわかりません。どなたか詳しい方、教えていただけると助かります

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

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

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

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

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

guest

回答3

0

ベストアンサー

forがどの範囲を繰り返すかは、for実行前に確定するからです。

Python

1ra = range(len(x)) 2for i in ra:

と同じです。

繰り返しのたびにlen(x)を調べて欲しい場合は、whileを使います。

Python

1i = 0 2while i < len(x): 3 ~~~ 4 i += 1

投稿2020/10/08 02:44

otn

総合スコア85901

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

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

tatuya.donnan

2020/10/08 11:05

早速の回答大変ありがとうございます。1行目のサンプルプログラムが非常にわかりやすかったです。解決しました。
guest

0

確かにfor文というのはリストから1つずつ要素を取り出すという表現をされる事がありますが
実際にリスト内から要素が取り出されるわけではありません。一度そのイメージは捨ててください。

len関数は、対象の要素数やまたは文字数を取得する関数です。
range関数は、指定した数字までの連番を生成する関数です。
range(start, stop, step)の様にstartには開始値、stopには終了値、stepには増量値を指定出来ます。
開始値や増量は省略が可能で、引数を1つだけ与えた場合にはそれは終了値として認識され
その場合デフォルトで開始値には0、増量は1として実行されます。

range(len(変数))この場合には、変数の要素数(または文字数)の数だけ連番を生成するという構文になります。
range関数に対しては引数は1つしか与えられていない為、開始値と増量値は省略された扱いとなり
それぞれ開始値は0、増量値は1として実行されます。
range関数で生成した連番をfor文で1つずつ処理していくという流れとなっています。

python

1x= ['a', 'b', 'c', 'd', 'e', 'f'] # 要素数は6 2print(len(x)) 3> 6 4 5# 引数が1つである為、開始値と増量値は省略された扱いとなり自動で開始値は0,増量値は1となる 6for i in range(len(x)): 7 print(i) 8> 0 9> 1 10> 2 11> 3 12> 4 13> 5 14 15# 例えばもう一つ引数を2と指定した場合、開始値が2、終了値がlen(x)、増量値は省略されて自動で1となる 16for i in range(2, len(x)): 17 print(i) 18> 2 19> 3 20> 4 21> 5 22 23# 開始値も増量値も指定した場合 24for i in range(0, len(x), 2): 25 print(i) 26> 0 27> 2 28> 4

投稿2020/10/08 02:58

nto

総合スコア1438

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

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

tatuya.donnan

2020/10/08 11:04

とても早く丁寧な回答ありがとうございます。rangeの中身についての詳しい処理についてよくわかりました。
guest

0

python3の range(n) 関数は
0から始まるn個の連続した値を持つオブジェクトを返すためです。
例.) range(3) # 0, 1, 2

投稿2020/10/08 02:43

marusa

総合スコア17

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

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

tatuya.donnan

2020/10/08 11:07

早い回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問