広告 python

【網羅】Pythonのスライス|後ろからや2次元配列の扱い方も!

Python スライスのアイキャッチ画像
サル

「Pythonでどうやってスライスするの?」
「そもそもPythonのスライスってなに?」

とお悩みではありませんか。

Pythonのスライスとは、リスト、文字列、タプルなどのデータから要素を取り出すために用意されている機能です。

本記事では、Pythonのスライスのやり方や応用について網羅的に解説していきます。

最後まで読めば、リストや文字列などから自在に要素が抽出できるようになるでしょう。

本記事の信頼性

サルでもわかるデータサイエンスの運営者のプロフィール画像

以下でお悩みの方に読んで欲しい

Webアプリを簡単開発!

しょー

StreamlitだけでWebアプリを開発するには限界があります

HTMLやCSSを書かなくていいのがStreamlitの利点ですが、Streamlitだけだとアプリ開発は難しいでしょう。

そんな悩みを抱えているあなたにおすすめしたいUdemyの講座が「FastAPIによるWeb API開発講座」です。

  • フロントエンド:Streamlit
  • バックエンド:FastAPI
  • データベース:SQLAlchemy

以上のフレームワークの構成で簡単な予約アプリまで作れるようになります。

しょー

一切開発をしたことがない僕でも簡単に理解できました!

Streamlitに限界を感じている人は、ぜひ受講してStreamlitマスターになりましょう。

Streamlitの開発がさらに容易に!/

Udemyでアプリ開発を学ぶ

しょー

それでは本編です!

Pythonのスライスとは

Pythonのスライスとは、リスト、文字列、タプルなどのデータから要素を取り出すために用意されている機能です。

スライスを使用することで、特定の要素や逆順、何個かおきに取り出すこともできます。

例えば、[1, 2, 3, 4, 5, 6]とリストがあった場合、[2, 4, 6]と偶数番目だけ取り出すことなどが可能です。

Pythonのスライスの使い方​​

Pythonのスライスの使い方のアイキャッチ画像

この章では、Pythonのスライスの基本的な使い方について解説していきます。

  • 始める点と終わる点の指定
  • ステップ(何個おき)かの指定

スライスでは、始点や終点、何個おきに取り出すかを簡単に選択できるのです。

それぞれ解説していきます。

始める点と終わる点の指定

Pythonのスライスでは、リストや文字列などから特定の範囲の要素を取り出せます

基本的な形は[start:stop]で、startはスライスの開始位置で、stopは終了位置です。

以下のようなコードが、スライスを実装する例になります。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[1:4]  # 結果は [1, 2, 3]

例えば、my_list[1:4]とすると、my_listの2番目から4番目までの要素が取得できます。

始点を1と指定して、2番目から要素が取り出されるのは、リストの開始が「0」から始まるからです。

例の場合、4と指定していますが、終点は「指定したインデックス(リストでの数え)-1」までしか取得されないので注意しましょう。

しょー

覚えるのが苦手だという人は、リストを1から数えた時の指定した番号まで要素が取得できると覚えましょう!

また、スライスの始点や終点を省略することもできます。

始点を省略する場合、以下のようにコードを書くと、最初からスライスされます。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[:4]  # 結果は [0, 1, 2, 3]

終点を省略する場合も、始点の省略の書き方と似ているので、あわせて覚えましょう。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[1:]  # 結果は [1, 2, 3, 4, 5]

始点と終点の省略の違いを比べると以下のように表せます。

始点:左側がないmy_list[:4]
終点:右側がないmy_list[1:]
始点と終点の省略の違い

また、負のインデックスを使用することで、リストの末尾から要素を取得できます。

例えば、my_list[-3:-1]とすると、末尾から3番目から2番目までの要素が取得できます。

終点に「-1」と記述してしまうと、末尾は取得できないので注意です。

ステップ(何個おき)かの指定

Pythonのスライスのステップは、取得する要素の間隔を指定できます。

基本的な形は[start:stop:step]です。stepに2を指定すると、1つ飛ばしで要素が取得されます。

先ほどと同じように、my_listを用いて、ステップ関数を説明していきます。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[0:5:2]  # 結果は [0, 2, 4]

まず、終点がリストのインデックスで5が指定されているため、my_list内の4まで取得されます。

そして、stepに2を指定しているため1つ飛ばしで要素が取得されることから、my_listの1番目、3番目、5番目の要素が取得できます。

ステップを上手く使うことで、for文などでも1つ飛ばしで要素を渡すことが可能です。

スライスの応用的な使い方

Pythonのスライスの応用的な使い方のアイキャッチ画像

この章では、Pythonのスライスの応用的な使い方について詳しく解説します。

  • 2次元の配列(リスト)をスライスする​​
  • リストを逆順にする
  • データフレームの行をスライスする

どの応用も、利用頻度が髙いので、ぜひ参考にしてください。

2次元の配列(リスト)をスライスする​​

Pythonでは、2次元の配列(リスト)もスライスでき、基本的な形は[リスト_start:リスト_stop]です。

リストの中にリストが入っているので、番号を指定すると、それぞれリストが出力されます。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
sliced_matrix = matrix[0:2]  # 結果は [[1, 2, 3], [4, 5, 6]]

以上のコードから分かるように、普通のリストのスライスと同じように指定できます。

しょー

それぞれの数値がリスト単位になっただけだと考えましょう。

リストの中のリストをスライスには、以下のようにコードを記述すると可能です。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
sliced_matrix = matrix[0][0:2]  # 結果は [0, 2, 4]

matrix[0]と指定することで、一番目のリストだけを取り出し、そのリストに対してスライスを更にしています。

このように、スライスを2重にすることで、リストの中のリストを取り出せるのです。

それぞれのリストの1番目だけ取得することも、内包表記を利用することで可能です。Q&Aにて解説しております。

リストを逆順(後ろから)にする

Pythonのスライスを応用することで、リストを逆順にすることができます。

リストを逆順にするには、以下のようにスライスのstepに-1を入れます

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[5:0:-1]  # 結果は [5, 4, 3, 2, 1]

以上のようにコードを記述することで、リストを逆順から取得できます。

[5:0]と、始点が終点より後ろのリストの要素を指定しているので、注意してください。

また、リストを逆順にしてしたい場合は、以下のようにコードを記述しましょう。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = my_list[::-1]  # 結果は [5, 4, 3, 2, 1, 0]

以上のように、スライスのstepを工夫することで、逆順にスライスできます。

しょー

便利な機能ですので、ぜひ覚えておきましょう。

データフレームの行をスライスする

Pythonでデータフレームを扱う時用いるライブラリであるPandasのデータフレームもスライスできます。

基本的な形はdf[start:stop]です。例えば、df[10:20]とすると、10行目から19行目までのデータが取得できます。

# pandasとdatasetsライブラリをインポート
import pandas as pd
from sklearn.datasets import load_iris

# Irisデータセットをロード
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# 最初の5行を表示(スライス)
first_five_rows = df[10:20]
print(type(first_five_rows))
first_five_rows.head()

以上のコードが、サンプルデータのインポートから、データフレームのスライスまで行ったコードです。

このスライスの方法では行に対してしか行えず、スライスした後もデータフレーム型であるのが特徴になります。

locなどの関数を使うことで、データフレームの特定要素にアクセスすることも可能です。

特定行だけ取り出したい場合はよくありますので、押さえておきましょう。

Q&A|Pythonのスライスで「よくある質問」に回答!

Q&A

最後に、Pythonのスライスに関するよくある質問にお答えします。

  • Q1. 2次元配列でそれぞれのリストの特定要素だけ取得できる?
  • Q2. スライスで条件つけられる?
  • Q3. スライスが使えるのはリストだけ?

それぞれ回答していきます。

Q1. 2次元配列でそれぞれのリストの特定要素だけ取得できる?

2次元配列でそれぞれのリストの特定要素だけ取得できる?

サル
しょー

内包表記を使えば可能です!

内包表記を用いることで、以下のようにコードを記述すると、それぞれのリストの特定要素だけ取り出せます。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
sliced_column = [row[1] for row in matrix]  # 結果は [2, 5, 8]

このコードでは、for文でそれぞれのリストを取り出して、そのリストに対してスライスを行っています。

そのため、それぞれのリストの要素を2つずつ取ってくることも可能です。

Q2. スライスで条件つけられる?

スライスで条件つけられる?

サル
しょー

if文とfor文を組み合わせることで可能です!

以下のように、内包表記でfor文とif文を組み合わせることで、条件を設けられます。

my_list = [0, 1, 2, 3, 4, 5]
sliced_list = [x for x in my_list[1:5] if x > 2]  # 結果は [3, 4]

このコードでは、for文の所でリストで特定の範囲を抽出し、そこから条件でさらに絞り込んでいる形です。

条件までつけられると一気にできることが広がるので、ぜひ試してみてください。

Q3. スライスが使えるのはリストだけ?

スライスが使えるのはリストだけ?

サル
しょー

リストだけでなく、文字列やタプル、データフレームなどに使えます!

例えば、文字列のスライスは以下のようにコードを記述できます。

my_string = "abcdef"
sliced_string = my_string[2:5]  # 結果は "cde"

文字列のスライスでは、1文字ずつがリストの1要素のように扱われると考えましょう。

そのため、リストと大きく設定方法は変わりません。

まとめ

以上がPythonのスライスについて解説してきました。

Pythonのスライスとは、リスト、文字列、タプルなどのデータから要素を取り出すために用意されている機能で、非常に便利です。

スライスでは、以下のような項目を設定します。

  • 始める点と終わる点の指定
  • ステップ(何個おき)かの指定

また、応用として以下のようなことにも利用可能です。

  • 2次元の配列(リスト)をスライスする​​
  • リストを逆順にする
  • データフレームの行をスライスする

以上のことに加えて、内包表記などを組み合わせる方法や文字列などのスライスについてもQ&Aで回答しております。

  • Q1. 2次元配列でそれぞれのリストの特定要素だけ取得できる?
  • Q2. スライスで条件つけられる?
  • Q3. スライスが使えるのはリストだけ?

あわせて覚えておくとよいでしょう。

もし、

「Python勉強してるけど、Webアプリ開発もしてみたい...」
「そもそもPythonでアプリ開発できるのか知りたい...」

という方は、僕も受講したUdemyの『爆速で5つのPython Webアプリを開発』がおすすめです!

詳細が気になる方は以下のボタンをクリックの上、ご確認ください。

\セール情報を確認する!/

【広告】StreamlitをUdemyで学ぶ

ブログランキング・にほんブログ村へ
人気ブログランキングでフォロー
サルでもわかるデータサイエンスのブログアイキャッチ画像
運営者の画像

しょー

地方公立大学でデータサイエンスについて学んでいる大学3年生のしょーです。

これまで、大学で学んできたこと、個人的に調べてきた情報を、「大学の先輩」的なポジションから大学生をサポートしたいと考えております。

何か分からないことがあれば、X(Twitter)のDMやブログ内のお問い合わせにてご相談ください。

また、記事作成依頼やサービスの体験依頼も承っております。 お気軽にご相談ください。

-python
-