Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python入門:リストスライスとリスト内包表記の基本を徹底解説

この記事では、Pythonにおけるリストスライス(list slicing)リスト内包表記(list comprehension)について、初心者にもわかりやすく解説します。

リストスライスとは?

「スライス」という言葉は、文字通り「何かを小さく切り分ける」という意味です。リストスライスとは、元のリストから一部分だけを取り出す処理のことを指します。どこから切り出すか(開始位置)、どこで止めるか(終了位置)、どの間隔で切り出すか(ステップ数)を自由に指定できるのが特徴です。

リスト内包表記とは?

リスト内包表記は、既存のリストをもとに新しいリストを生成するための記法です。forループや条件式を1行にまとめて書けるため、簡潔かつエレガントにリストを作成できるのが大きな魅力です。

リストスライスの基本的な使い方

まずは、スライス操作の練習用にリストを作成してみましょう。

>>> mylist = ["Which ", "Language ", "To ", "Choose ", "Difficult, ", "Python ",
    "Java ", "Kotlin ", "Many more"]

Pythonのリストは負のインデックスでもアクセスできます。-1が最後の要素、-2が後ろから2番目の要素というように、末尾から逆方向に数えていく仕組みです。

>>> mylist_slice1 = mylist[0: -1:2]
>>> mylist_slice1
['Which ', 'To ', 'Difficult, ', 'Java ']

リストをスライスする際は、まず対象のリスト名(ここではmylist)を呼び出し、その後に角括弧[]の中へスライスの条件を指定します。[]の中に渡せる引数は以下の3つです。

  • 第1引数: スライスを開始するインデックス
  • 第2引数: スライスを終了するインデックス(この位置自体は含まれない)
  • 第3引数: 切り出す間隔(ステップ数)。省略可能

まとめると、スライスの構文は次のようになります。

mylist[START: STOP:STEP]
>>> mylist_slice2 = mylist[1:-1:2]
>>> mylist_slice2
['Language ', 'Choose ', 'Python ', 'Kotlin ']

上の例では、インデックス1から始まり、末尾の手前まで、2つおきに要素を取り出しています。

リスト内包表記の基本的な使い方

リスト内包表記を使うと、既存のリストから新しいリストを簡単に生成できます。まずはrange()関数で数値のリストを作成し、そのまま内包表記に活用してみましょう。

>>> mylist1 = [x for x in range(0, 40)]
>>> mylist1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
    27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
>>>
>>> mylist2 = [x for x in range(0,41) if x%2 == 0]
>>> mylist2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40]

何が起きているのか順番に見ていきましょう。まず角括弧の中で一時変数「x」を定義し、続くforループで0〜40の範囲(range)を順に反復しています。これを実行すると、0から39までの数値リストが生成されます。

次に作成した2つ目のリストでは、「if x%2 == 0」という条件式を追加しました。これは「xを2で割った余りが0(=偶数)」の場合のみ要素として採用することを意味します。つまり、偶数だけを抽出したリストが得られるのです。

文字列リストでの内包表記の応用例

内包表記は数値だけでなく、文字列のリストにも活用できます。次の例では、各要素をすべて小文字に変換しています。

>>> strlist = ["This", "Is", "A" , "List" , "Of", "Strings", "For", "List", "Comprehension"]
>>> print([x.lower() for x in strlist])
['this', 'is', 'a', 'list', 'of', 'strings', 'for', 'list', 'comprehension']

このように、文字列リストの各要素に対してlower()メソッドを適用し、すべて小文字化した新しいリストをたった1行で生成できました。

まとめ

リストスライスは既存のリストから必要な部分だけを柔軟に取り出す機能、リスト内包表記は条件や変換処理を組み合わせて新しいリストを簡潔に作成する機能です。両者をマスターすれば、Pythonでのデータ操作が格段に効率的になります。ぜひ実際にコードを書いて試してみてください。

  1. Pythonの例外処理入門:try・exceptの基本とよく使われる例外の種類

    Pythonで例外処理(エラーハンドリング)を行うには、まず「except」句を使って例外を捕捉する仕組みを理解する必要があります。Pythonでは、例外をキャッチするために「try」と「except」というキーワードが用意されています。tryブロック内のコードは文ごとに順番に実行されますが、途中で例外が発生すると、残りのtryブロックのコードは実行されず、代わりにexcept節が実行される仕組みです。基本的な構文try: some_statements_here except: exception_handlingシンプルな例まずは非常に簡単な例で構文を確認してみましょう。t

  2. Pythonで配列リスト内の0と1を分離する方法

    リスト内包表記(List Comprehension)はPythonで広く使われている人気のテクニックです。ここでは、この手法を活用して配列内の0と1を分離してみましょう。 まず、ユーザーから入力を受け取って配列を作成します。配列の要素は0と1がランダムな順序で含まれているものとします。そして、0を配列の左側へ、1を右側へと分離させます。 具体的には、配列を走査しながら要素を2つの異なるリストに振り分けます。片方のリストには0だけを、もう片方のリストには1だけを格納し、最後にその2つのリストを連結することで目的の結果を得られます。 実行例 入力: a=[0,1,1,0,0,1] 出力: [0