forループを使用して、ループインデックス(この場合は1から5)にアクセスするにはどうすればよいですか?
enumerate
反復しながら要素を使用してインデックスを取得するために使用します。
for index, item in enumerate(items):
print(index, item)
また、Pythonのインデックスはゼロから始まるため、上記では0〜4になることに注意してください。1から5までのカウントが必要な場合は、次のようにします。
for count, item in enumerate(items, start=1):
print(count, item)
ユニディオマティック制御フロー
あなたが求めているのは、Pythonicで以下に相当するものです。これは、低レベル言語のほとんどのプログラマが使用するアルゴリズムです。
index = 0 # Python's indexing starts at zero
for item in items: # Python's for loops are a "for each" loop
print(index, item)
index += 1
または、for-eachループがない言語の場合:
index = 0
while index < len(items):
print(index, items[index])
index += 1
またはPythonで見つかることもあります(ただし、一義的に):
for index in range(len(items)):
print(index, items[index])
列挙関数を使用する
Pythonのenumerate
関数は、インデックスのアカウンティングを非表示にし、イテラブルを別のイテラブル(enumerate
オブジェクト)にカプセル化することにより、視覚的な混乱を減らします。これは次のようになります。
for index, item in enumerate(items, start=0): # default is zero
print(index, item)
このコードサンプルは、Pythonの慣用的なコードとそうでないコードの違いの標準的な例です。慣用的なコードは洗練された(しかし複雑ではない)Pythonであり、意図された方法で記述されています。慣用的なコードは言語の設計者に期待されています。つまり、通常、このコードは読みやすくなるだけでなく、効率も向上します。
カウントを取得する
インデックスは必要ないが、反復の数が必要な場合(場合によっては望ましい)から始めて1
、最後の数がカウントになります。
for count, item in enumerate(items, start=1): # default is zero
print(item)
print('there were {0} items printed'.format(count))
1から5にしたいと言ったとき、カウントは、(インデックスではなく)要求するつもりであるようです。
それを分解する-ステップバイステップの説明
これらの例を分解するために、インデックスで反復したい項目のリストがあるとしましょう:
items = ['a', 'b', 'c', 'd', 'e']
次に、この反復可能オブジェクトを列挙に渡して、列挙オブジェクトを作成します。
enumerate_object = enumerate(items) # the enumerate object
このイテラブルから、next
関数でループする最初の項目を取得できます。
iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)
そして0
、最初のインデックスであると'a'
最初のアイテムであるのタプルを取得していることがわかります。
(0, 'a')
「シーケンスのアンパック」と呼ばれるものを使用して、この2つのタプルから要素を抽出できます。
index, item = iteration
# 0, 'a' = (0, 'a') # essentially this.
検査するindex
と、最初のインデックス0をitem
参照し、最初の項目を参照していることがわかります'a'
。
>>> print(index)
0
>>> print(item)
a
結論
- Pythonインデックスはゼロから始まります
- 反復処理中に反復可能オブジェクトからこれらのインデックスを取得するには、列挙関数を使用します
- enumerateを慣用的な方法で(タプルのアンパックと共に)使用すると、より読みやすく保守しやすいコードが作成されます。
これを行います:
for index, item in enumerate(items, start=0): # Python indexes start at zero
print(index, item)