Pythonのリスト作成では、次の4つをよく使います。
- 直接書く:[]の中に値をカンマで区切って入力する。
- range()関数:連続した整数のリストを素早く作成。
- list()関数:文字列やタプルなどの別オブジェクトをリストに変換。
- リスト内包表記:forループで様々な条件で多様なリストを作成。
それぞれ解説していきます。
なおリスト内包表記は最初は難しく感じるかもしれませんが、繰り返し練習することで理解が深まりますので、ぜひ使いこなせるようになりましょう。
1. リスト作成の基本
1.1. 基本の作り方
リストを作成する最も基本的な方法は、[] の中に、値をカンマで区切って入力する方法です。
# 空のリスト
empty_list = []
print(empty_list)
# 数値のリスト
num_list = [1, 2, 3]
print(num_list)
# 文字列のリスト
str_list = ['りんご', 'バナナ', 'チェリー']
print(str_list)
# 異なる型が混在したリスト
mix_list = [1, 'りんご', 2, 'バナナ']
print(mix_list)
リスト作成において覚えておきたいのは次の2点です。
- 空のリストを作成することができる。
- 数値や文字列など、型が異なる要素が混在することができる。
1.2. 要素が反復したリストを作る(リストの初期化)
同じ要素が反復したリストを作るには、*演算子が便利です。
list_a = [0]*10
print(list_a)
list_b = [0, 1, 2]*3
print(list_b)
1.3. 要素が変数のリスト
リストの要素は変数でも構いません。
a = 10
b = 20
c = "Hello"
list = [a, b, c]
print(list)
リストの値に変数を格納した場合、後からその変数の値を変更してもリストの値は変わりません。
以下の例をご覧ください。
a = 10
b = 20
c = 30
list = [a, b, c]
#変数bの値をリストに入れた後に変更してもリストの値は変化しません。
b = 99
print(list)
この例では、一度、20 を代入した変数 b をリストに入れた後で、b に 99 を代入しています。しかし、abc を出力すると、[10, 20, 30]となり、 20 が 99 に置き換わっていません。この特徴は覚えておきましょう。
2. range()関数で数値が連続したリストを作成
range()関数を使うと、数値が連続したリストを手軽に作ることができます。次のように書きます。
range(開始位置, 終了位置, ステップ)
このように、第一引数で開始位置の数値、第二引数で終了位置の数値、第三引数にステップを指定します。
終了位置とステップはなくても構いません。
range関数の使い方そのものについては以下のページで詳しく解説しています。
それでは以下のコードをご覧ください。
# 0から10までのリスト
list_a = list(range(10))
print(list_a)
# 0から10までの奇数の偶数
list_b = list (range(0, 10, 2))
print(list_b)
# 0から10までの奇数のリスト
list_c = list(range(1, 10, 2))
print(list_c)
# 降順のリスト
list_d = list(range(10, 0, -1))
print(list_d)
数値が指定した範囲(開始位置~終了位置-1の範囲)で連続してリスト化されていますね。
降順の数値のリストを作るには、「開始の整数」を大きな数字に「終了の整数」を小さな数字にして「ステップ」はマイナスの数字を入力します。
注意点として、開始位置や終了位置、ステップに矛盾がある場合は空のリストが作られることを知っておきましょう。
例えば、以下のコードでは、第三引数のステップに-1を入れることで降順で数値をリスト化しようとしています。
それにも関わらず、開始位置「0」の方が、終了位置「10」より小さいため矛盾が発生しています。
結果、空のリストが作られています。
# rangeの条件が矛盾している場合は空のリストになる。
list_e = list(range(0, 10, -1))
print(list_e)
3. list()関数によるリスト作成
別のオブジェクトをリストに変換することによって、リストを作成するにはlist()関数を使います。
次のように書きます。
list(オブジェクト)
list()関数は、引数に渡した別の型のオブジェクト(文字列やセット、辞書等)をリストに変換する関数です。
文字列に対してlist()関数を使うと、文字の一つ一つがリストの要素になってリスト化されます。この際、空白も一つのリストの要素として変換されます。
# 文字列のリスト化
str1 = 'aaa'
print(list(str1))
str2 = 'word'
print(list(str2))
str3 = 'this is a pen.'
print(list(str3))
空白ごとなど任意の区切り文字を基準にして文字列をリスト化したい場合はsplit()メソッドを使います。
text = 'this is a pen.'
print(text.split())
これについては、以下のページで詳しく解説しています。
タプルとセットは要素はそのままリスト化されます。
# タプルのリスト化
tuple1 = (1, 2, 3)
print(list(tuple1))
tuple2 = ('apple', 'banana', 'cherry')
print(list(tuple2))
# setのリスト化
set = {'mac user', 'windows user', 'else'}
print(list(set))
辞書の場合は、キーのみをリスト化するか、値のみをリスト化するか、キーと値の両方をリスト化するかによって、以下のメソッドを使い分ける必要があります。
- keys()メソッド(任意):キーのみリスト化する
- values()メソッド:値のみリスト化する
- items()メソッド:キーと値の両方をリスト化する
これらのメソッドについては「辞書のキーや値を調べる方法」で解説しています。
なお、キーのみをリスト化する場合のkeys()メソッドはなくても構いません。以下のコードをご覧ください。
# 辞書のリスト化
dict = {'A':'apple', 'B':'banana', 'C':'cherry'}
# 辞書のキーのみをリスト化する
print(list(dict))
# 辞書の値のみをリスト化する
print(list(dict.values()))
# 辞書のキーと値をリスト化する
print(list(dict.items()))
4. リスト内包表記
リスト内包表記は、処理速度やコードの簡潔さを保つという点で大きなメリットのあるとても「Pythonらしい」リスト作成方法です。
初見では見慣れないかもしれませんが、Pythonを書くなら、是非ともマスターしておきたいものです。
リスト内包表記を使いこなすにはforループの理解が不可欠です。そのためforループを使ったリスト作成方法から解説します。
なおfor文については、「Pythonのfor文(forループ)の基本」で解説しています。
4.1. for文によるリスト作成
例えば、整数を2乗した数値が並ぶリストを作成するとします。
その場合、手打ちで作ることも不可能ではありませんが、要素数が多くなればなるほど計算も、コードを書くことも大変になってしまいます。
そのような時は、forループを回すことによって、次のように手軽にそのリストを作ることができます。
squares = []
for num in range(5):
squares.append(num**2)
print(squares)
この方法なら、要素数がどれだけ多くなっても問題ありませんね。
ちなみにfor文の中で使っているappend()メソッドは、リストに要素を追加する時に使うメソッドです。「Pythonのリストに要素を追加,結合/連結する方法まとめ」で解説しています。
4.2. リスト内包表記によるリスト作成
上と同じリストを、リスト内包表記で作ると、以下のように一行で簡潔に書くことができます。
squares = [num**2 for num in range(5)]
print(squares)
リスト内包表記では、if文や三項演算子を含めることで、さまざまな条件で任意のリストを作ることができます。
以下のページで詳しく解説しています。
使いこなせるように練習を重ねましょう。
5. まとめ
プログラミング初学者の方は、まずは、直接リストを書く方法、range()関数を使う方法、list()関数を使う方法をしっかりとマスターしましょう。
リスト内包表記を書けるようになるには、まずfor文から学習しましょう。for文を使いこなせるようになれば、リスト内包表記も自然と扱えるようになります。
ひとつひとつ地道に上達していきましょう。
コメント
コメント一覧 (1件)
初心者の僕には分かり易かったです。有難うございました。