【Python】forループでインデックスを取得する3つの方法【基本講座】

Python

【Python】forループでインデックスを取得する3つの方法【基本講座】

Pythonのforループでもっともよく行うのが、リスト(list)やタプル(tuple)などを処理する場合です。これらのインデックスと要素を同時に取得したい場合はどうすればよいでしょうか?
その方法は3つあります。状況に応じていつでも使えるようにそれぞれ覚えておきましょう。繰り返し変換練習をすると効果的です。

出典:http://www.photo-ac.com/

for文でインデックスと要素を同時に取得するときに使用したい3つの方法

愚直に書いてみる

愚直に書くとコードが冗長して醜くなりますが、まずはこれが書けることが第一歩でしょう。

# インデックス化したいものをリスト化しています。
l = ["A", "B", "C", "D"]

# カウンタの初期化
cnt = 0

# リストlからひとつずつ文字を取り出していく。
for s in l:

    # 取り出した文字をprintしていく。
  print(str(cnt + 1) + ": ", s)

    # 必ずカウンタを送ること
  cnt += 1

今までの知識でどうこうなったはずです。
これ以降、ある関数を3つの方法に分けて書いていきます。
どれもコードの簡略化が望める素晴らしい手法です。

range()関数を使用する

for文のイテラブルの部分を指定の関数に変えることで簡単にコードが書けます。

rangeオブジェクトを使うと簡単に書けます。

それでは、先ほどの例を書き換えましょう。

# インデックス化したいものをリスト化しています。
l = ["A", "B", "C", "D"]

# rangeオブジェクトにより0からlの要素数までの背数値iを取り出す。
for i in range(len(l)):

    # lのインデックスに指定して要素をprintしていく。
  print(str(i + 1) + ": ", l[i])

enumerate()関数を使用する

続いて、enumerate()関数を使う方法です。先ほどは、インデックス値を軸にアクセスしていましたが、今回は、リストからインデックス値と要素を2ついっぺんに取り出せるという効率の良い関数です。ペアタプルで取り出します。

# インデックス化したいものをリスト化しています。
l = ["A", "B", "C", "D"]

# enumerate関数の引数にlを渡す。
# それをiとnのインデックス値と要素を入れる変数をペアタプルの形で書く。
for i, n in enumerate(l):

    # インデックス値と要素をそれぞれprintできる。
  print(str(i + 1) + ": ", n)

zip()関数を使用する

さらに効率の良い関数があります。zip関数と呼ばれるものです。
先ほどのenumerate関数は、インデックスと要素をタプルで取り出すというものでした。これは、これで良いものですが、リストが複数あって、それを対にしたい時はどうしますか?enumerateでは、できませんよね?今回の想定するのは、別にインデックス値が欲しくないのです。
zip関数は、そんな夢をかなえてくれる魔法の関数です。

では、早速先ほどの例を改造してみましょう。

# l1とl2のリストを作ります。
l1 = ["a", "b", "c", "d"]
l2 = ["A", "B", "C", "D"]

# zip関数の引数にl1とl2を渡します。※リストが増えれば、カンマで区切ってゆけばよい。
# それをs1とs2の変数をタプル型で書く。※リスト分、カンマで区切ってゆく。
for (s1, s2) in zip(l1, l2):

    # s1とs2をそれぞれprintできる。
  print(s1 + ":" + s2)

このようにzip関数は、複数のリストをイテラブルな形で、要素をまとめてタプルで引数に渡しています。

それでは、対象のリストで要素数が異なる場合はどのような挙動になるのでしょうか?
例を見てみましょう。

# l1とl2のリストを作ります。
l1 = ["a", "b"]
l2 = ["A", "B", "C", "D"]

# zip関数の引数にl1とl2を渡します。※リストが増えれば、カンマで区切ってゆけばよい。
# それをs1とs2の変数をタプル型で書く。※リスト分、カンマで区切ってゆく。
for (s1, s2) in zip(l1, l2):

    # s1とs2をそれぞれprintできる。
  print(s1 + ":" + s2)

>> a:A
   b:B

となりました。
つまり、ペアを取れる要素のみ取り出されるということです。

Pythonおすすめ書籍

最初の2冊は初心者向けです。Effectiv Pythonはこの2冊を終えてから読むとかなりわかりやすく感動できると思います。

基礎 Python (IMPRESS KISO SERIES)

新品価格
¥6,200から
(2020/4/21 20:50時点)

入門 Python 3

新品価格
¥4,070から
(2020/4/21 20:53時点)

Effective Python ?Pythonプログラムを改良する59項目

新品価格
¥3,520から
(2020/4/21 20:52時点)

独学に限界を感じていませんか?

プログラミング初学者がもっとも陥りやすいのは、挫折です。

なぜ?挫折するのでしょうか?

それは独学だけでは、限界があるからです。

でも、あきらめてはそこで終わりです。

プログラミング言語習得には、メンターと呼ばれる教えてくれる人間が必要です。メンターがいれば、挫折する確率がグンと低くなります。

困ったときに、いつでも教えてくれる先生がいれば心強いと思いませんか?

でも、先生って、学校行く時間もないし、、、そんなこと思っていませんか?
今は、Webでプログラミングが学べる時代なんですよ!

でも、お高いんでしょ?

うーん。これは考え方なのかもしれないんですが、例えば、こう考えてはどうでしょうか?
スクール代金が1コース20万円として、その後、ITエンジニアに就職したら、平均30万円以上は、稼げるのですぐに元が取れますよね?
この数値は、リクナビなど転職サイトを検索すればすぐ出てくる数値です。

今一時の出し渋りにより、一生の賃金を損することになるか、倍以上手に出来るかは、自明ですよね?

でも、どこが良いのかわからない。

そこで、厳選したプログラミングスクールと動画サイトをご紹介いたします。

タイトルとURLをコピーしました