3日目において、リストの概念を理解しました。今日は、リストをさらに詳しく見ていきます。リストのスライス (list slicing)とネストされたリスト (nested list)を学習します。

1 リストのスライス (List Slicing)

スライスを使用して一度に複数の要素にアクセスできます。「Python」言語でのリストのスライシングとは、リストから要素のサブセット (subset)を抽出するために使用される手法を指します。元のリスト内のインデックスの範囲または位置の範囲を指定して、新しいリストを作成できます。リストスライスの一般的な構文は次のとおりです。list[start:stop:step] (Tip 1)。

TIPS: リストのスライス (List Slicing)

list[start:stop:step]
  • start は、スライスに含めたい最初の要素のインデックスです(start自信を含む)。
  • stop は、スライスから除外したい最初の要素のインデックス(stopの位置にある要素は抽出されません)です。つまり、このインデックスの前の要素が含まれます。
  • step(optional)は、スライスに含める要素を決定するために使用されます。この値の分だけインデックスの値は大きくなります。

以下の例では、インデックス1からインデックス3までのすべての要素を抽出しています。インデックスは0から始まります。

numbers = [1, 2, 3, 4, 5]
subset = numbers[1:4]  # Retrieves elements at index 1, 2, and 3
print(subset)
[2, 3, 4]

リストのスライスを使った要素の抽出には、いくつかの方法があります:

numbers = [1, 2, 3, 4, 5]
print(numbers[::])  # Retrieve all elements without specifying anything
print(numbers[::2])  # Only specify step, retrieving elements at index 0, 2, 4
print(numbers[::-1])  # Retrieve all elements in the inverse order
[1, 2, 3, 4, 5]
[1, 3, 5]
[5, 4, 3, 2, 1]

2 ネストされたリスト (Nested Lists)

ネストされたリストを作ることもできます:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list)
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

このネストされたリストでは、要素は row (行)と column (列)に保存されます(Table 1)。

Table 1: Structure of a Nested List
  Column 0 Column 1 Column 2
Row 0 1 2 3
Row 1 4 5 6
Row 2 7 8 9

0行目、0列目の要素は以下のようにアクセスできます:

print(nested_list[0][0])  # Row 0, Column 0
1

最初の0は最初の行、 そして2つ目の0は最初の列を返します。これらの例を確認することで、ネストされたリスト内の要素にアクセスする方法を理解することができます:

print(nested_list[0][1])  # Row 0, Column 1
print(nested_list[1][2])  # Row 1, Column 2
print(nested_list[2][2])  # Row 2, Column 2
2
6
9

各行には以下のようにしてアクセスできます:

print(nested_list[0])  # Row 0
print(nested_list[1])  # Row 1
print(nested_list[2])  # Row 2
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

ネストされたリストでは各列へのアクセスはそれほど簡単ではなく、ここでは説明しません。ただし、新しいことを理解したい人のために、コードを貼り付けておきます (コードは リスト内法表記 (list comprehension)を利用しています):

print([row[0] for row in nested_list])  # Column 0
[1, 4, 7]

3 Exercises