Python リストの操作

Python

リストの結合

リストとリストを結合して、1つのリストにすることができます。リストの結合には「+」演算子やextend()メソッドを使用します。

+演算子でのリストの結合

「+」演算子を利用して2つのリストを結合します。

【+演算子でのリストの結合】
リスト名3 = リスト名1 + リスト名2
#data1リストとdata2リストを結合したdata3リストを作成します。
data1 = [10,20,30,40,50]
data2 = [60,70,80,90,100]
data3 = data1 + data2
print("data1は",data1)
print("data2は",data2)
print("data3は",data3)
data1は [10, 20, 30, 40, 50]
data2は [60, 70, 80, 90, 100]
data3は [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

要素数が5個のdata1と、要素数が5個のdata2を結合して、要素数が10個のdata3が作成されているのが確認できます。

extend()でのリストの結合

extend()メソッドでは一方のリストにもう一方のリストを結合(拡張)させます。

【extend()でのリストの結合】
リスト1.extend(リスト2)
#data1リストにdata2リストを結合します。
data1 = [10,20,30,40,50]
data2 = [60,70,80,90,100]
print("結合前のdata1は",data1)
print("結合前のdata2は",data2)
print()
data1.extend(data2)
print("結合後のdata1は",data1)
print("結合後のdata2は",data2)
結合前のdata1は [10, 20, 30, 40, 50]
結合前のdata2は [60, 70, 80, 90, 100]

結合後のdata1は [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
結合後のdata2は [60, 70, 80, 90, 100]

要素数が5個のdata1の後ろに、要素数が5個のdata2を結合して、要素数が10個のdata1が作成されています。data2は変化しません。

リストのスライス指定

リストではスライス(slice)という機能を使うことでデータの範囲を指定して取り出すことができます。基本的なスライス方法は下記になります。

【スライス指定方法】
リスト名[開始値:終了値:間隔]

スライス指定は記述方法で次のように様々な指定方法が可能です。

#インデックスが0~4の範囲を指定
リスト名[0:5]
#インデックスの5以降を指定
リスト名[5:]
#間隔2を開けて値を指定
リスト名[::2]
#間隔-1(逆順)で値を指定
リスト名[::-1]
#スライスでデータ範囲を指定して表示
data = [10,20,30,40,50,60,70,80,90,100]
print(data[0:5])
print(data[5:])
print(data[::2])
print(data[::-1])
[10, 20, 30, 40, 50]
[60, 70, 80, 90, 100]
[10, 30, 50, 70, 90]
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10]

1行目は、最初から5番目の要素までを取り出しています。
2行目は、6番目(インデックスで5)から最後までの要素を取り出しています。
3行目は、ひとつおき(間隔2)で要素を取り出しています。
4行目は、ー1間隔(逆から)で全要素を取り出しています。

リストの逆順

reversed()命令やreverse()メソッドを使用することで、逆並びでデータを取り出したり、リストを逆順に変換したりできます。

リストの逆順指定 reversed()

reversed()関数を使用すると繰り返し処理のfor文で逆順でデータを取り出すことができます。注意点としてreversed()関数は元のリストを逆順にはしない、という事があります。
また、reversed()関数で逆順にしたリストをprint()関数では表示できません。

【リストの逆順指定】
reversed(リスト名)
#reversed()関数をfor文で使用してデータを逆順に取り出します。
data1 = [10,20,30,40,50,60,70,80,90,100]
print("実行前のデータ=",data1)
for d in reversed(data1):
    print(d,end=", ")
print()
print("実行後のデータ=",data1)
print(reversed(data1))
実行前のデータ= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 

実行後のデータ= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]   
<list_reverseiterator object at 0x00C663E8>

for文内で、リストをreversed()関数で逆順指定すると値を逆から取り出しすることができます。実行結果の4行目で分かるように、reversed()関数を使用しても元のデータが逆順になるわけではありません。
また備考として、reversed()関数で逆順にしたリストをprint関数では表示することができません。実行すると5行目のようなメッセージが表示されます。

リストの逆順変換 reverse()

reverse()メソッドを使用するとリストを逆順に変換することができます。

【リストの逆順変換】
リスト名.reverse()
#リストを逆順に変換します。
data1 = [10,20,30,40,50,60,70,80,90,100]
print("変換前のデータ=",data1)
data1.reverse()
print("変換後のデータ=",data1)
変換前のデータ= [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
変換後のデータ= [100, 90, 80, 70, 60, 50, 40, 30, 20, 10] 

reverse()メソッドは、元のデータの順番を入れ替えます。実行結果の2行目のように、リスト内のデータの並び順が逆になっています。