Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Python辞典

  1. トップページ
  2. Python辞典
  3. リスト + リスト / リスト * n / スライス

リスト + リスト / リスト * n / スライス

リストを結合・繰り返し・部分取得するための演算子と構文です。スライスはPythonの強力な機能の一つです。

構文
# + 演算子でリストを結合して新しいリストを返します。
結合リスト = リスト1 + リスト2

# * 演算子でリストを繰り返して新しいリストを返します。
繰り返しリスト = リスト * 回数

# スライスで部分リストを取得します(終了インデックスは含みません)。
部分リスト = リスト[開始:終了]
部分リスト = リスト[開始:終了:ステップ]

# スライスで代入・削除もできます。
リスト[開始:終了] = 新しい値のリスト
関数一覧
構文概要
list1 + list22つのリストを結合した新しいリストを返します。元のリストは変更されません。
list * nリストを n 回繰り返した新しいリストを返します。
list[start:stop]インデックス start から stop-1 までの部分リストを返します。負のインデックスも使えます。
list[start:stop:step]start から stop-1 までを step 間隔で取得します。step=-1 で逆順コピーになります。
list[start:stop] = valuesスライスの範囲を別のリストで置き換えます。元のリストが変更されます。
サンプルコード
# + 演算子でリストを結合します。
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)  # [1, 2, 3, 4, 5, 6]
print(a)  # [1, 2, 3](元のリストは変わりません)

# * 演算子でリストを繰り返します。
zeros = [0] * 5
print(zeros)  # [0, 0, 0, 0, 0]

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

# スライスの基本です。
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5])   # [2, 3, 4](インデックス2〜4)
print(nums[:3])    # [0, 1, 2](先頭から3つ)
print(nums[7:])    # [7, 8, 9](インデックス7以降)
print(nums[:])     # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9](全体のコピー)

# 負のインデックスを使います。
print(nums[-3:])   # [7, 8, 9](末尾から3つ)
print(nums[:-2])   # [0, 1, 2, 3, 4, 5, 6, 7](末尾2つを除く)

# ステップを使ったスライスです。
print(nums[::2])   # [0, 2, 4, 6, 8](1つ飛ばし)
print(nums[1::2])  # [1, 3, 5, 7, 9](1から1つ飛ばし)
print(nums[::-1])  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](逆順)

# スライスでリストを逆順にコピーします。
original = ["a", "b", "c", "d"]
reversed_copy = original[::-1]
print(reversed_copy)  # ['d', 'c', 'b', 'a']
print(original)       # ['a', 'b', 'c', 'd'](変更なし)

# スライスに代入して要素を置き換えます(元のリストが変更されます)。
nums2 = [1, 2, 3, 4, 5]
nums2[1:3] = [20, 30, 40]  # インデックス1〜2を3要素で置き換えます。
print(nums2)  # [1, 20, 30, 40, 4, 5]

# スライスで要素を削除します。
nums2[2:4] = []
print(nums2)  # [1, 20, 4, 5]
概要

スライスはPythonの非常に便利な機能で、リストだけでなく文字列・タプル・rangeオブジェクトにも使えます。スライスで取得した結果は常に新しいオブジェクトになるため、元のリストは変更されません。

『list * n』で繰り返しリストを作成するとき、要素がリスト(ミュータブルなオブジェクト)の場合は、同じオブジェクトへの参照が繰り返されます。例えば『[[0]*3]*3』で3行3列の行列を作ると、各行が同じリストを参照するため、1つを変更すると全行に影響します。行列を作る場合はリスト内包表記『[[0]*3 for _ in range(3)]』を使ってください。

スライスへの代入(『list[start:stop] = values』)では、置き換え後の要素数が削除した要素数と異なっていても構いません。リストのサイズは自動的に調整されます。リストの複製には『リスト.copy()』または『list[:]』が使えます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。