【Python】リスト(list)

Takuyaです。

今回は Python のリスト型についてです。Python には複数の値をまとめて扱うデータ型がいくつかありますが、そのうちの1つがリスト型です。

では順番に見ていきましょう。

リストを作成する

リストは [ ] で作成します。[ ]は日本語だと角括弧、英語だとbracket(ブラケット)と呼ぶそうです。[ ]内にはコンマ区切りで値(要素)を書きます。

num_list = [10, 20, 30, 40, 50]

print("type:", type(num_list))

print("num_list:", num_list)
type: <class 'list'>
num_list: [10, 20, 30, 40, 50]

リストには数値、文字列を入れたり、リストにリストを入れたり、True・Falseの真偽値(ブーリアン型)を入れることもでき、それらを混ぜて入れることもできます。

some_list = [123, 'abc', [1, 2, 3], True]

print("type:", type(some_list))

print("num_list:", some_list)
type: <class 'list'>
num_list: [123, 'abc', [1, 2, 3], True]

(混ぜることはできますが、同じ型の値のみにするケースが多いと思います。)

もちろん、変数を指定して作成することもできます。

a = 123
b = 'abc'
c = [4, 5, 6]
d = False

some_list = [a, b, c, d]

print("some_list:", some_list)
some_list: [123, 'abc', [4, 5, 6], False]

list() 関数を使って作成することもできます。

name_list = list("Takuya")

print("name_list:", name_list)
name_list: ['T', 'a', 'k', 'u', 'y', 'a']

リストの値(要素)を読み出す

リストの値(要素)はインデックスを指定して読み出します。Python のインデックスは0(ゼロ)から始まります。

some_list = [123, 'abc', [1, 2, 3], True]

print("some_list[0]:", some_list[0])
print("some_list[1]:", some_list[1])
print("some_list[2]:", some_list[2])
print("some_list[3]:", some_list[3])

print("##########")

for i in some_list:
    print(i)
some_list[0]: 123
some_list[1]: abc
some_list[2]: [1, 2, 3]
some_list[3]: True
##########
123
abc
[1, 2, 3]
True

また、インデックスに「-1」を指定すると、リストの一番後ろの値を読み出せます。「-2」は後ろから2番目の値になります。

some_list = [123, 'abc', [1, 2, 3], True]

print("some_list[-1]:", some_list[-1])
print("some_list[-2]:", some_list[-2])
some_list[-1]: True
some_list[-2]: [1, 2, 3]

スライス操作でリストの一部を切り出す

スライス操作でリストの一部分を切り出すことができます。

切り出す範囲 start と stop を指定して切り出す


スライス操作で切り出す範囲を指定してリストを切り出したい時は list_name[start:stop] の形式で記述します。

name_list = list("Takuya")

name_slice_list = name_list[0:4]

print("name_list:", name_list)

print("name_list:", name_slice_list)

上記の実行結果

name_list: ['T', 'a', 'k', 'u', 'y', 'a']
name_slice_list: ['T', 'a', 'k', 'u']

あれ?と思われた方、多そうですね。

Python Girls
Python Girls

0から4まで指定したんだから、「y」まで切り出されるんじゃないの?

同じようにと思われた方が多いと思いますが、stop で指定したインデックスの値は含まれないのです。

start <= index < stop と覚えてもよいですし、次のようなイメージで覚えてもらってもよいと思います。

Python slice

またまた「あれ?」が聞こえてきそうですね。

Python Girls
Python Girls

インデックス番号は「6」まであるの?

確認してみましょう。

name_list = list("Takuya")

print(name_list[6])

上記の実行結果

IndexError: list index out of range

インデックスエラーになりました。インデックス番号は「5」までです。

しかし、、、

name_list = list("Takuya")

name_slice_list = name_list[3:6]

print("name_list:", name_list)

print("name_slice_list:", name_slice_list)

上記の実行結果

name_list: ['T', 'a', 'k', 'u', 'y', 'a']
name_slice_list: ['u', 'y', 'a']

エラーにならないんですね。これ、「100」を指定してもエラーになりません。例えば、「100:1000」でやってみます。

name_list = list("Takuya")

name_slice_list = name_list[100:1000]

print("name_list:", name_list)

print("name_slice_list1:", name_slice_list)

上記の実行結果

name_list: ['T', 'a', 'k', 'u', 'y', 'a']
name_slice_list1: []

エラーにはならず、値が何も入っていない空のリストが返ってきました。

謎仕様ですね。エラーにはなりませんが、変なインデックスを指定するのは止めておきましょう。

リストの最後の値までを切り出したい時stop を省略して記述します。同じようにリストの先頭から切り出したい時start を省略します。

name_list = list("Takuya")

name_slice_list1 = name_list[:3]

name_slice_list2 = name_list[3:]

print("name_list:", name_list)

print("name_slice_list1:", name_slice_list1)

print("name_slice_list2:", name_slice_list2)
name_list: ['T', 'a', 'k', 'u', 'y', 'a']
name_slice_list1: ['T', 'a', 'k']
name_slice_list2: ['u', 'y', 'a']

増分 step を指定して切り出す

リストから1つ飛ばしで値を切り出したい時などは step を指定します。

list_name[start:stop:step] の形式で記述します。

name_list = list("Takuya")

name_slice_list_consonant = name_list[::2]

name_slice_list_vowel = name_list[1::2]

name_slice_list_reverse = name_list[::-1]

print("name_list:", name_list)

print("name_slice_list_consonant:", name_slice_list_consonant)

print("name_slice_list_vowel:", name_slice_list_vowel)

print("name_slice_list_reverse:", name_slice_list_reverse)
name_list: ['T', 'a', 'k', 'u', 'y', 'a']
name_slice_list_consonant: ['T', 'k', 'y']
name_slice_list_vowel: ['a', 'u', 'a']
name_slice_list_reverse: ['a', 'y', 'u', 'k', 'a', 'T']

リストに値を追加する

作成したリストに値を追加する方法を見ていきましょう。

リストの最後に値を追加する( append )

リストの最後に値を追加するには append メソッドを使います。

some_list = [123, 'abc', [1, 2, 3], True]

print("some_list:", some_list)

some_list.append(456)

print("some_list:", some_list)
some_list: [123, 'abc', [1, 2, 3], True]
some_list: [123, 'abc', [1, 2, 3], True, 456]
注意

メソッドを使用する時の括弧は ( ) を使います。
(丸括弧、パレンティス(parenthesis))
リストを作成する時やインデックスを指定する時は [ ] です。

位置を指定して値を追加する( insert )

位置を指定してリストに値を追加したい時は insert メソッドを使います。
list_name.insert(index) という形式で記述します。

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list.insert(0, 999)

print("num_list:", num_list)
num_list: [999, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list.insert(5, 999)

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 999, 5, 6, 7, 8, 9]
num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list.insert(-2, 999)

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 5, 6, 7, 999, 8, 9]

リストから値を削除する

リストから値を削除する方法を見ていきましょう。

位置を指定してリストから値を削除し、削除した値を取得する( pop )

位置を指定してリストから値を削除し、削除した値を取得したい時は pop メソッドを使います。
list_name.pop(index) の形式で記述します。
index を省略した場合は一番最後の値が削除されます。

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print("num_list (before):", num_list)

print("num_list.pop(3):", num_list.pop(3))

print("num_list (after1):", num_list)

print("num_list.pop(-3):", num_list.pop(-3))

print("num_list (after2):", num_list)

print("num_list.pop():", num_list.pop())

print("num_list (after3):", num_list)
num_list (before): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
num_list.pop(3): 3
num_list (after1): [0, 1, 2, 4, 5, 6, 7, 8, 9]
num_list.pop(-3): 7
num_list (after2): [0, 1, 2, 4, 5, 6, 8, 9]
num_list.pop(): 9
num_list (after3): [0, 1, 2, 4, 5, 6, 8]

値を指定して、同じ値の先頭の要素を削除する( remove )

リストには値を指定して、同じ値の先頭の要素を削除する remove メソッドがあります。list_name(value) の形式で記述します。

num_list = [1, 2, 3, 1, 2, 3, 1, 2, 3]

num_list.remove(3)

print("num_list:", num_list)

num_list.remove(3)

print("num_list:", num_list)

num_list.remove(3)

print("num_list:", num_list)
num_list: [1, 2, 1, 2, 3, 1, 2, 3]
num_list: [1, 2, 1, 2, 1, 2, 3]
num_list: [1, 2, 1, 2, 1, 2]
注意

リストにない値を指定すると ValueError となります。

del 文で削除する

del 文でもリストの値を削除できます。del 文での削除はスライス操作が可能です。

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del num_list[5]

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 6, 7, 8, 9]
num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del num_list[3:8]

print("num_list:", num_list)
num_list: [0, 1, 2, 8, 9]

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del num_list[::2]

print("num_list:", num_list)
num_list: [1, 3, 5, 7, 9]
num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

del num_list

print("num_list:", num_list)
NameError: name 'num_list' is not defined

※リスト自体が削除され、エラーになります。

リストの値を変更する

リストの値は後から変更することができます。

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list[5] = 999

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 999, 6, 7, 8, 9]

num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

num_list[3:6] = [123, 456, 789]

print("num_list:", num_list)
num_list: [0, 1, 2, 123, 456, 789, 6, 7, 8, 9]

リストを結合する

リストを結合する方法を見ていきましょう。

足し算の演算子 + で結合する

足し算の演算子 + で結合することができます。

a = [0, 1, 2, 3, 4]

b = [5, 6, 7, 8, 9]

num_list = a + b

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
num_list = [0, 1, 2, 3, 4]

b = [5, 6, 7, 8, 9]

num_list += b

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

extend メソッドで結合する

リストの extend メソッドを使うことでも結合することができます。

num_list = [0, 1, 2, 3, 4]

b = [5, 6, 7, 8, 9]

num_list.extend(b)

print("num_list:", num_list)
num_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

リストの長さを確認する

リストの長さ=リストに含まれている値の個数を確認したい時は len 関数を使います。

num_list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

print("len(num_list):", len(num_list))
len(num_list): 23

その他のリストのメソッド

指定した値がリストの中に何個あるかを数える( count )

count メソッドは指定した値がリストの中に何個あるかを数えてくれます。

num_list = [1, 2, 3, 4, 100, 999, 1, 3, 4, 999, 999, 999, 999]

print("num_list.count(1):", num_list.count(1))

print("num_list.count(999):", num_list.count(999))
num_list.count(1): 2
num_list.count(999): 5

値を並べ替える( sort )

sort メソッドを使うことでリストの値を昇順、降順で並び変えることができます。
昇順で並び替える場合は list_name.sort() 、
降順で並び替える場合は list_name.sort(reverse=True) と記述します。

num_list = [1, 2, 3, 9, 5, 12, 99, 33, 9.999]

num_list.sort()

print("num_list:", num_list)

num_list.sort(reverse=True)

print("num_list:", num_list)
num_list: [1, 2, 3, 5, 9, 9.999, 12, 33, 99]
num_list: [99, 33, 12, 9.999, 9, 5, 3, 2, 1]
str_list = ["xyz", "abc", "123"]

str_list.sort()

print("str_list:", str_list)

str_list.sort(reverse=True)

print("str_list:", str_list)
str_list: ['123', 'abc', 'xyz']
str_list: ['xyz', 'abc', '123']
注意

数値と文字列、文字列とブーリアン型などが混在しているとエラーになります。

リストの並び順を逆にする( reverse )

ソートはせずに、単純にリストの並び順を逆にしたい場合は reverse メソッドを使います。

num_list = [1, 2, 3, 9, 5, 12, 99, 33, 9.999]

num_list.reverse()

print("num_list:", num_list)
num_list: [9.999, 33, 99, 12, 5, 9, 3, 2, 1]

その他にも。。。

リストには他にもメソッドが用意されています。help 関数で確認できるので、確認してみてください。

class list(object)
 |  list(iterable=(), /)
 |  
 |  Built-in mutable sequence.
 |  
 |  If no argument is given, the constructor creates a new empty list.
 |  The argument must be an iterable if specified.
 |  
 |  Methods defined here:
 |  
 |  __add__(self, value, /)
 |      Return self+value.
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.
 |  
 |  __ge__(self, value, /)
 |      Return self>=value.
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __getitem__(...)
 |      x.__getitem__(y) <==> x[y]
 |  
 |  __gt__(self, value, /)
 |      Return self>value.
 |  
 |  __iadd__(self, value, /)
 |      Implement self+=value.
 |  
 |  __imul__(self, value, /)
 |      Implement self*=value.
 |  
 |  __init__(self, /, *args, **kwargs)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.
 |  
 |  __mul__(self, value, /)
 |      Return self*value.
 |  
 |  __ne__(self, value, /)
 |      Return self!=value.
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  __reversed__(self, /)
 |      Return a reverse iterator over the list.
 |  
 |  __rmul__(self, value, /)
 |      Return value*self.
 |  
 |  __setitem__(self, key, value, /)
 |      Set self[key] to value.
 |  
 |  __sizeof__(self, /)
 |      Return the size of the list in memory, in bytes.
 |  
 |  append(self, object, /)
 |      Append object to the end of the list.
 |  
 |  clear(self, /)
 |      Remove all items from list.
 |  
 |  copy(self, /)
 |      Return a shallow copy of the list.
 |  
 |  count(self, value, /)
 |      Return number of occurrences of value.
 |  
 |  extend(self, iterable, /)
 |      Extend list by appending elements from the iterable.
 |  
 |  index(self, value, start=0, stop=9223372036854775807, /)
 |      Return first index of value.
 |      
 |      Raises ValueError if the value is not present.
 |  
 |  insert(self, index, object, /)
 |      Insert object before index.
 |  
 |  pop(self, index=-1, /)
 |      Remove and return item at index (default last).
 |      
 |      Raises IndexError if list is empty or index is out of range.
 |  
 |  remove(self, value, /)
 |      Remove first occurrence of value.
 |      
 |      Raises ValueError if the value is not present.
 |  
 |  reverse(self, /)
 |      Reverse *IN PLACE*.
 |  
 |  sort(self, /, *, key=None, reverse=False)
 |      Sort the list in ascending order and return None.
 |      
 |      The sort is in-place (i.e. the list itself is modified) and stable (i.e. the
 |      order of two equal elements is maintained).
 |      
 |      If a key function is given, apply it once to each list item and sort them,
 |      ascending or descending, according to their function values.
 |      
 |      The reverse flag can be set to sort in descending order.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です