Python Tech

[初心者向け] Python リスト(配列)の作り方 様々な初期化方法を全部解説【保存版】

Python初心者が理解しやすい、基本のキから解説するシリーズ。

今回はPythonにおける配列のような変数 list (リスト)の初期化・宣言、値の代入について解説しています。

  • 空のリストを作成したい
  • 値を指定してリストを作成したい
  • 値 + 要素数を指定してリストを作成したい
  • 他の変数の値を利用してリストを作成したい

リストの扱い方について、現役のエンジニアが解説しています。

 

結論

空のリストを作成するには [] で初期化します。

l = []
print(l)
# []

 

特定の値をもつリストを作成するには、その値をカンマ区切りで渡せばOKです。

l = [0, 1, 2, 3]
print(l)
# [0, 1, 2, 3]

 

要素数が決まっており、ある規則にしたがった値を持つリストを作るには、次のように
* 演算子や range()関数を利用します。

l = [9] * 10
print(l)
# [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]

l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]

l = list(range(0, 12, 2))
print(l)
# [0, 2, 4, 6, 8, 10]

 

リスト内包表記を使えば、一行(ワンライナー)でリストを柔軟に作成できます。

l = [i**2 for i in range(6)]
print(l)
# [0, 1, 4, 9, 16, 25]

 

他の変数の値を利用してリストを作るには、以下のようにします。

文字列の場合

s = 'hoge fuga'
l = list(s)
print(l)
# ['h', 'o', 'g', 'e', ' ', 'f', 'u', 'g', 'a']

 

タプルの場合

t = ('foo', 'bar', 'baz')
l = list(t)
print(l)
# ['foo', 'bar', 'baz']

 

辞書の場合

d = {'a': 'foo', 'b': 'bar', 'c': 'baz'}
l = list(d.keys())
print(l)
# ['a', 'b', 'c']
l = list(d.values())
print(l)
# ['foo', 'bar', 'baz']
l = list(d.items())
print(l)
# [('a', 'foo'), ('b', 'bar'), ('c', 'baz')]

 

実行環境

Python 3.9.2

 

空のリストを作成

空(長さ0)のリストを作成するには、[]で初期化します。

l = []
print(l)
# []

print(len(l))
# 0

 

次のようにしても空のリストを生成できます。これは何となく確認しておけば十分です。

l = list()
print(l)
# []

 

(脱初心者向け)これは、listクラスを使うと任意のオブジェクト(イテラブル)からリスト変数を作成できますが、コンストラクタに何も渡さない場合は空のリストを返す仕様を利用しています。

 

値を指定してリストを作成

任意の値を持つリストを作成するには次のようにします。

ここでは整数の組み合わせを指定しています。

l = [0, 1, 2, 3]
print(l)
# [0, 1, 2, 3]

print(len(l))
# 4

 

指定したとおりの値が格納されたリストが作成されましたね。

もちろん、整数値以外も指定できます。例えば文字列の値だと次のようになります。

l = ['a', 'b', 'c']
print(l)
# ['a', 'b', 'c']

 

値 + 要素数を指定してリストを作成

* 演算子を使う方法

任意の長さだけ連続した値を持つリストは次のように作成します。

ここでは * 演算子を使って、リストを同じ要素で拡張しています。

l = [9] * 10
print(l)
# [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]

 

同じ値ではなく、同じパターンを連続する場合は次のようにします。シンプルで理解しやすいですね。

l = [1, 2, 3] * 3
print(l)
# [1, 2, 3, 1, 2, 3, 1, 2, 3]

 

range()関数を使う方法

同じように、ある規則に従った値のリストを作るとき range() 関数を使うと簡単です。

range() 関数は、ある規則で連続した値の組み合わせを生成します。

例えば for文で0から4まで1ずつ増加させて繰り返したいときは、次のようにrange()関数に5を渡します。

for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4

 

list()にrange()で生成したオブジェクトを渡せばリストになるので、次のようにlist(range())としてみましょう。

range(stop)
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]

このときの関係は
0 <= 要素 < stop
となります。

 

また、次のように始点も指定できます。

range(start, stop)
l = list(range(2, 5))
print(l)
# [2, 3, 4]

このときの関係は
start <= 要素 < stop
となります。

 

要素同士の間隔を変更することもできます(デフォルト=1)

range(start, stop, step)
l = list(range(0, 12, 2))
print(l)
# [0, 2, 4, 6, 8, 10]

このときの関係は
start <= n*step < stop
となります。

組み込み型 — Python 3.9.4 ドキュメント

 

リスト内包表記を使う方法

ある規則(式)に従った値のリストを作成するなら、リスト内包表記を利用する方法もあります。

リスト内包表記は1行だけでシンプルにリストを作成できるので、Pythonではよく使われるテクニックです。

後で説明するように、速度面でのメリットもあります。

2ずつ大きくなる整数(等差数列)のリストを作成するには次のようにします。

l = [i*2 for i in range(6)]
print(l)
# [0, 2, 4, 6, 8, 10]

 

構文は次のようになっています。

[変数を使った式 for 変数 in オブジェクト]

オブジェクトには既にあるリストやタプル、rangeなどの繰り返し可能なもの(イテラブル、iterableといいます)を指定します。

これとまったく同じ結果は for文とlist.append()を使って次のように書けます。

l = []
for i in range(6):
    l.append(i*2)
print(l)
# [0, 2, 4, 6, 8, 10]

 

リスト内包表記で書くほうがスッキリしていますね。

また、for文とappend()で1要素ずつ追加する方法より、リスト内包表記のほうが処理が高速です。少なくとも上のような簡単なリスト生成では、リスト内包表記を使うべき場面が多いでしょう。

5. データ構造 — Python 3.9.4 ドキュメント

 

他の変数の値を利用してリストを作成

リストの初期化では、すでに定義された変数の値を使用できます。

a = 10
b = 20
c = 40
l = [a, b, c]
print(l)
# [10, 20, 40]

 

ここで、リストに使用された変数の値を変更しても、リストの値は変化しません。

a = 99
print(l)
# [10, 20, 40]

 

リストの値を変更するときは次のようにリストを直接操作します。

l[0] = 99
print(l)
# [99, 20, 40]

 

タプルからリストへ変換

タプル(tuple) からリストに変換するには次のように list() に渡します。

t = ('foo', 'bar', 'baz')
print(t)
# ('foo', 'bar', 'baz')
l = list(t)
print(l)
# ['foo', 'bar', 'baz']

 

文字列から文字のリストを作成する

文字列(str)から各文字をリストとして取り出すには、次のようにlist()に渡します。

s = 'hoge fuga'
print(s)
# hoge fuga
l = list(s)
print(l)
# ['h', 'o', 'g', 'e', ' ', 'f', 'u', 'g', 'a']

 

1文字ずつではなく、カンマやスペースなどの区切り文字で分けたリストを作成するには、次のようにsplit()関数を活用します。

data = 'hoge,piyo,fuga'
l = data.split(',')
print(l)
# ['hoge', 'piyo', 'fuga']

 

辞書のキー、値からリストを作成する

辞書(dict)はキー、値の要素があるので、それぞれを分けてリストにすることになります。

キーの取得はkey()、値の取得はvalues()、キーと値の組み合わせをタプルで取得するのはitems()を呼びます。

d = {'a': 'foo', 'b': 'bar', 'c': 'baz'}
print(d)
# {'a': 'foo', 'b': 'bar', 'c': 'baz'}
l = list(d.keys())
print(l)
# ['a', 'b', 'c']
l = list(d.values())
print(l)
# ['foo', 'bar', 'baz']
l = list(d.items())
print(l)
# [('a', 'foo'), ('b', 'bar'), ('c', 'baz')]

 

組み込み型 — Python 3.9.4 ドキュメント

 

今回参考にしたページ・資料

組み込み型 — Python 3.9.4 ドキュメント

5. データ構造 — Python 3.9.4 ドキュメント

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。日常での学びを記事にしています。

人気の記事

1

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるようになるためのスクール選びで失敗 ...

2

先日の記事では、初心者からフリーランスプログラマーになる難しさと、それでもなんとか稼げるようになるにはどうしたらいいか解説しました。 今回の記事では、稼げるフリーランサーになるために必要な要素を、もう ...

3

気休めだけの甘い言葉は書きません。 最近は多くの企業やサイトで、使い捨てられるプログラマーが欲しいがために、甘い言葉で初心者プログラマを誘い出しています。 この記事では、まずは「現実」をちゃんと理解し ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのスピナー(処理中のマーク)として ...

5

※画像はずとまよの新曲とは一切関係ありません   ずっと真夜中でいいのに。(以下、ずとまよ)の新曲『勘ぐれい』のMVが12月1日に公開されましたね。 MV前に公開されていた原曲を聴き、神曲な ...

6

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 state(変数、コンポーネン ...

-Python, Tech
-,

© 2021 ペンギンのーと