【Python】リスト(list)の基本について解説

python Python

この記事の内容

この記事では、Pythonで定義されているリスト(list)の基本について解説します。Pythonを使用する上で基本的な内容になりますので必ずおさえておくようにしましょう。

リスト(list)の概要

リストの概要

リストは任意のオブジェクトを複数まとめたものになります。他のプログラミング言語では配列と呼ばれるものに似ています。

リストを定義するには以下のように記載します。ここでは、numbersというリスト名で定義しています。また、numbersのリストには、’zero’と’one’と’two’の文字列が格納されています。

numbers = ['zero', 'one', 'two']

このように、リストを定義するには、角括弧で囲い各リストの要素の区切りをカンマで区切る必要があります。

次にリストの特徴をあげます。

  • リストには順序が付けられている
  • リストの要素には任意のオブジェクトを含めることができる
  • リストの要素にはインデックスでアクセスできる
  • リストは任意の深さでネストできる(入れ子にできる)
  • リストは変更が可能(ミュータブル(mutable)ともいう)
  • リストは動的である

詳細は後ほど説明します。

リストの要素順、任意オブジェクトの格納について

リストの要素順

リストには要素の格納されている順番が管理されます。比較演算子を使ってその意味を説明します。以下のコードを見てください。number_aとnumber_bが同じ内容で定義されており、そのリストを比較しています。この場合は、両リスト同じ順番で同じ内容が入っていますので、比較結果は同じ(True)となります。

>>> numbers_a = ['zero', 'one', 'two']
>>> numbers_b = ['zero', 'one', 'two']
>>> numbers_a == numbers_b
True

次にnumbers_cというリストを用意し、number_aとnumber_cを比較します。number_cの内容は、oneとtwoが逆になっており、numbers_aとは要素の内容の順番が入れ替わっています。この状態で、比較するとリストは要素順を評価しますので、比較結果は違う(False)となります。

>>> numbers_a = ['zero', 'one', 'two']
>>> numbers_c = ['zero', 'two', 'one']
>>> numbers_a == numbers_c
False

任意オブジェクトの格納

スト内の要素には、様々な型のオブジェクトを入れることができます。数値、文字列、関数、クラスまたモジュールなどあらゆるものを格納できます。次に、実際に様々な型のオブジェクトをリストの要素に設定する例を示します。

数値と文字列を入れる場合

>>> hoge = [1,'one',2,'two']
>>> hoge
[1, 'one', 2, 'two']

関数、モジュールを入れる場合

>>> import math
>>> math.sin
<built-in function sin>
>>> math
<module 'math' (built-in)>
>>> hoge = [math.sin,math]
>>> hoge
[<built-in function sin>, <module 'math' (built-in)>]

リスト要素の取得

インデックスを指定して要素を取得

リストに角括弧で囲い、その中にインデックスを指定することでリスト内の要素を取り出すことができます。インデックスの数値は先頭の要素を取得する場合は0を指定します。先頭から2つ目の要素を指定するには1を指定します。このように、0から始まることを0オリジンといいます。以降は、0オリジンで記事の内容は表記します。先頭の要素を0番目の要素と記載し、先頭の次の要素を1番目の要素と記載します。リストに存在しないインデックスを指定するとエラーになります。例を以下に示します。

>>> numbers = ['zero', 'one', 'two']
>>> numbers[0]
'zero'
>>> numbers[2]
'two'
>>> numbers[3]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range

負数のインデックスを指定して要素を取得

リストのインデックスに負数を指定することができます。この場合、リストの後ろを起点に値を指定します。例えば、一番後ろの要素を指定する場合は、-1を指定します。例を以下に示します。

>>> numbers = ['zero', 'one', 'two']
>>> numbers[-1]
'two'
>>> numbers[-3]
'zero'

リストのスライス処理

スライスの概要

先ほどまでは、単一の要素を取得する方法を紹介しました。スライスは、リストから一部を抽出する方法です。スライスの書き方は以下になります。

リスト名[start:stop]

スライスの例

実際に例を見たほうが早いので、以下に例を示します。以下はnumbers[1:3]と指定してスライスをしています。この場合、1番目から、3番目の手前である2番目の要素まで取得することができます。

>>> numbers = ['zero', 'one', 'two', 'three', 'four']
>>> numbers[1:3]
['one', 'two']

インデックスに負数を指定するスライス

また、以下のように負数のインデックスを指定して、スライスすることも可能です。この場合、後ろから数えて5番目の要素(‘zero’)から、後ろから数えて2番目の1つ手前(‘two’)までの間を取得することができます。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> numbers[-5:-2]
['zero', 'one', 'two']

インデックスを省略するスライス

これまでは、スライスする範囲の開始と終了を指定しましたが、省略することができます。

例えば、numbers[:3]と書くことで、先頭の要素から、2番目の要素まで取得できます。

また、終了を同様に省略することもでき、例えば、numbers[1:]と書くことで、1番目の要素から、最後の要素まで取得できます。

そして、開始と終了の両方を省略することもできます。この場合、numbers[:]と記載し、すべての要素が取得できます。

例を以下に示します。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> numbers[:3]
['zero', 'one', 'two']
>>> numbers[1:]
['one', 'two', 'three', 'four']
>>> numbers[:]
['zero', 'one', 'two', 'three', 'four']

スライスでステップを指定する

ステップの概要

これまではスライスで、特定の連続した範囲を取得しました。スライスにはstepを指定することで、連続した範囲だけではなく一部の要素を飛ばし、その要素を集めたリストを取得することもできます。以下の様に記載します。

リスト名[start:stop:step]

ステップを指定するスライスの例

例えば、numbers[0:4:2]と指定すると、0番目の要素から、3番目の要素まで1つおきに取得することになります。これはステップが2と指定されているためです。実際の例を以下に示します。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> numbers[0:4:2]
['zero', 'two']

リストのネストについて

リストをネストする方法を紹介します。リスト内の要素にさらにリストを含めることができます。この例を以下に示します。リストの1番目の要素に、さらにリスト[0,1,2]を入れています。このサブリストを取得するには、通常のインデックス指定と同じで、numbers[1]と指定します。サブリストの1番目の要素を指定するには、numbers[1][1]のように指定します。

>>> numbers = ['zero', [0,1,2], 'two']
>>> numbers[1]
[0, 1, 2]
>>> numbers[1][1]

リストは変更が可能

リスト内の要素に代入するなどして変更することで、リストの内容を変更することができます。以下の様にリストの1番目の要素に1を代入すると、リストの1番目の要素が変更されていることがわかります。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> numbers[1] = 1
>>> numbers
['zero', 1, 'two', 'three', 'four']

リスト内の要素数は動的に変更可能

リスト内の要素数は動的に増やしたり減らしたりすることができます。

リスト内の要素を増やす場合

リスト内の要素を増やす場合は以下の様に記載します。いくつか方法はありますが、ここでは +=演算子を使用してリストの要素を拡張しています。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> numbers += ['five']
>>> numbers
['zero', 'one', 'two', 'three', 'four', 'five']

リスト内の要素を減らす場合

リスト内の要素を減らす場合は以下の様に記載します。いくつか方法はありますが、ここではdelを使用してリストの要素を削除しています。

>>> numbers = ['zero', 'one', 'two','three','four']
>>> del numbers[2]
>>> numbers
['zero', 'one', 'three', 'four']

まとめ

今回は、以下のリストに関する基本的な内容について学びました。

  • リストには順序が付けられている
  • リストの要素には任意のオブジェクトを含めることができる
  • リストの要素にはインデックスでアクセスできる
  • リストの要素はスライスで部分的に取得ができる
  • リストは任意の深さでネストできる(入れ子にできる)
  • リストは動的に変更が可能(ミュータブル(mutable)ともいう)

コメント