Pythonのリストから要素を取り出す方法は、主に3つあります。
- インデックス番号から取り出す。
- for文を使って順番に取り出す。
- random.choice() またはsecret.choice()を使ってランダムに取り出す。
それぞれ解説していきます。
1. インデックス番号を使った取り出し
Python のリストに入れられているそれぞれの要素の値は、インデックス番号で管理されています。このことを知っておくと、一度作ったリストの中から、任意の要素を自由に取り出すことができるようになります。
早速、下図をご覧ください。
ご覧のように、Pythonのリストのインデックス番号は前から見る場合は、先頭から順に 0、1、2 … と数えていきます。後ろから見る場合は、逆順に -1、-2、-3 … と数えていきます。前からの場合は 0 から始まるのに対して、後ろからの場合は -1 から始まるという点に注意しましょう。
これを知っておくとリストから要素を取り出すことができます。
1.1. Pythonのリストからの任意の要素の取り出し
以下のリストをご覧ください。
colors = ["blue", "red", "green", "yellow"]
colors
colors というリストを作りました。このリストの要素は以下のようにインデックスされています。
ここから指定の要素を取り出すには、リスト名[対応するインデックス番号] と記述します。例えば、上記の colors と名付けられたリストの中から、インデックス番号 2 の要素を取り出すには、 colors[2] と書きます。
以下の例をご覧下さい。
print(colors[0])
print(colors[1])
print(colors[2])
print(colors[3])
同様に、後ろから数えたインデックス番号を指定して要素を取り出すこともできます。
print(colors[-1])
print(colors[-2])
print(colors[-3])
print(colors[-4])
1.2. 多重リストからの要素の取り出し
リストの中にリストが入っているようなものを多重リスト(多次元リスト)といいます。
以下をご覧下さい。
list_fruits_vegetables = [["orange", "apple", "peach"], ["carrot", "onion", "lettuce"]]
list_fruits_vegetables
list_fruits_vegetables という名前がつけられたリストには、 orange, apple, peach という要素が入ったものと、carrot, onion, lettuce という要素が入ったものの2つのリストが入っています。
この場合は、以下のようにインデックス番号が与えられます。
そのため、外枠のインデックス番号 0 には orange, apple, peach、インデックス番号 1 には carrot, onion, lettuce が割り振られています。
print(list_fruits_vegetables[0])
print(list_fruits_vegetables[1])
内側のリストから任意の要素を取り出すには、リスト名[対応する外側のインデックス番号] [対応する内側のインデックス番号] と記述します。
以下をご覧下さい。
print(list_fruits_vegetables[0][0])
print(list_fruits_vegetables[0][1])
print(list_fruits_vegetables[0][2])
print(list_fruits_vegetables[1][-1])
print(list_fruits_vegetables[1][-2])
print(list_fruits_vegetables[1][-3])
お分かりでしょうか?
例えば、apple という要素をピンポイントで取り出したいとします。どうすれば良いでしょうか?
その時は、以下のように考えます。
apple は、インデックス番号 0 が振り分けられている外側のリストの中で、 1 が与えられている要素です。
任意の要素を取り出す時は、
リスト名[対応する外側のインデックス番号] [対応する内側のインデックス番号]
と記述するので、次のように書けば取り出すことができます。
print(list_fruits_vegetables[0][1])
リストの構造が3重、4重となっていっても考え方は同じです。
2. for 文を使ったリストからの取り出し
2.1. for文を使ったリストからの全ての要素の取り出し
リストの要素を順に全て取り出したい場合は、for 文を使うのが効率的です(詳しくは「Pythonのfor文による繰り返し処理(forループ)の基本」)。
以下では、リストの先頭から、名前を取り出しています。
#顧客リストを作ります。
customer_list = ["山田", "鈴木", "高橋", "渡辺"]
#顧客リストから名前を順に、変数"who"に取り出していきます。
for who in customer_list :
print(who + "さん")
#元のリストに変化はありません。
customer_list
for文を使いこなすと、リストからの要素の取り出しを効率的にできるようになります。
2.2. for文を使った複数のリストからの要素の取り出し
for 文で、zip()を使うと、複数のリストから同時に要素を取り出すことができます。
#名字と名前が入ったリストを作ります。
last_name = ["山田", "鈴木", "高橋", "渡辺"]
first_name = ["太郎", "一郎", "二郎", "三郎"]
#空のリストを作ります。
full_name = []
#zipを使って2つのリストから要素を取り出します。
for last, first in zip(last_name, first_name) :
full_name.append(last + first)
#出力します。
full_name
上のコードで使っているappend()メソッドについては、「Pythonのリストに要素を追加する方法」でご確認ください。
なお、”for last, first in zip(last_name, first_name)” というように書く方法を「リスト内包表記」と言います。リスト内包表記の基本書式は以下の通りです。
[式 for 変数 イテラブル]
これも頭に入れておくと良いでしょう。
3. Pythonのリストからの要素のランダムな取り出し
リストから要素をランダムに取り出したい場合は、randomモジュールのchoice()関数、またはsecretsモジュールのchoice()関数を使います。
それぞれ、使い方は同じなので、続けて見ていきましょう。
なおモジュールについては、「Pythonのモジュール」でご確認ください。
#randomモジュールをインポートします。
import random
#リストを作ります。
colors = ["red", "blue", "yellow", "orange"]
#リストから要素をランダムに取り出します。
colors_random = random.choice(colors)
#確認しましょう。
colors_random
#secretsモジュールをインポートします。
import secrets
#リストを作ります。
colors = ["red", "blue", "yellow", "orange"]
#リストから要素をランダムに取り出します。
colors_random = secrets.choice(colors)
#確認しましょう。
colors_random
4. まとめ
いかがだったでしょうか。
それぞれ、使いどころが異なるので、状況に応じて使い分けられるようになるとベストです。
コメント