Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

文字列の必要な部分を抽出、文字列のインデックス指定とスライス - Python独学記

f:id:konie_ko:20200121154306p:plain

連載:「Python独学記」とは?

f:id:kenken0326:20190710153503p:plain
konie こんにちは、PyQ運営チームのkonieです。担当はマーケティングですが、Pythonの楽しさに目覚めて独学しています。

独学しているとどうしても行き詰まってしまうこと、ありますよね。
私はどうも釈然としなくてずっと同じ問題を解いていたり、解説を何度も読んでいたりすることがよくあります。

自分の中で引っかかっている部分を調べているとき、独学している人の経験談はとても参考になります。その知見の中から解決のヒントを得られたこともたくさんあります。

私も自分の独学する中で理解したことをPython学習チャンネルを通じて紹介することで、Pythonを勉強する誰かの役に立てればと思い、定期的に自分の「Python独学記」を投稿することにしました。

この独学記を読んで欲しい人・Pythonレベル

プログラミングを独学で学習しはじめた人です。

私自身は他言語からの独学ですが、はじめて学習する人にもわかりやすく、一緒に学べるように執筆したいです。

今回は文字列のインデックス指定とスライスについて学んでいた時に感じたことをまとめていきます。 インデックス指定やスライスを使うと文字列から指定する範囲の文字を抜き出すことができます。

これから学ぶ人や、学習してみたけれどピンとこず理解できていない人にわかりやすくお伝えできたらと思います。

文字列のインデックス指定、スライスとは

指定した位置の文字一文字を抜き出すことを、インデックス指定といいます。 指定した範囲の文字列を抜き出すことを、スライスといいます。

例えば下記のような文字列があったとします。

今は昔、竹取の翁といふものありけり。

この文字列の「10文字目を抜き出したい」、「10文字目から15文字目までを抜き出したい」などと思ったときに使うことができます。

基本的なインデックス指定、スライスの書き方・使い方

インデックス指定で文字列から一文字抜き出す場合文字列[抜き出したい位置]で抜き出せます。

また文字列[抜き出す最初の文字位置:抜き出す最後の文字位置]とすることで、文字列から指定範囲の文字を抜き出すことができます。この方法がスライスです。

文字列のインデックス指定で一文字を抜き出す例

先ほどの文字列の例で実際に抜き出してみましょう。

>>> moji = "今は昔、竹取の翁といふものありけり。"
>>> moji[10]
'ふ'

文字列から一文字抜き出せました。文字列の頭から11文字目が抜き出されましたね。

位置を指定するときの注意点

ここで注意したいのが、10と指定すると文字列の11文字目が抜き出されるということです。

文字列の文字、1文字ごとにインデックスが割り当てられます。インデックスの先頭は0、2番目は1が割り振られています。 よって1文字目は0、2文字目は1、・・・というように0から数えて指定します

なのでN文字目を抜き出したいというときはN-1を指定する必要があります。 f:id:konie_ko:20200121152404p:plain

文字列のスライスで指定した範囲の文字列を抜き出す例

次は10文字目から15文字目を抜き出す例です。

>>> moji = "今は昔、竹取の翁といふものありけり。"
>>> moji[9:15]
'いふものあり'

文字列から抜き出せました。

こちらも1文字を抜き出すときと同じように数えるので10文字目から抜き出したいときは9を指定します。

インデックス指定とスライスのいろいろなパターン

>>> moji = "今は昔、竹取の翁といふものありけり。"

>>> moji[7] # 8文字目を抜き出す
'翁'
>>> moji[7:] # 8文字目から最後までを抜き出す
'翁といふものありけり。'
>>> moji[7:10] # 8文字目から10文字目までを抜き出す
'翁とい'
>>> moji[:7] # 最初から7文字目までを抜きだす
'今は昔、竹取の'
>>> moji[-1] # 最後の文字を抜き出す
'。'
>>> moji[:-3] # 最初から最後の4文字目まで抜き出す
'今は昔、竹取の翁といふものあり'
>>> moji[-3:] # 最後3文字を抜き出す
'けり。'

学習中に気づいたこと・難しいと感じたこと

学習する時に難しいと感じたことは、抜き出す位置の指定です。

抜き出したい文字の指定は以下のようにまとめられます。

  • 先頭からN文字目ならN-1
  • 最後からN文字目ならN
  • 複数文字の抜き出しでN文字目からM文字目なら[N-1:M]

このように文字列の最初から指定するのか、後ろから指定するのか、途中を指定するのかで数え方が違うので難しく感じました。

実際に1、2、3、と文字を数えてそのままコードに書いてしまい、思っていない場所が抜き出されてしまったことが何回もあります。 気をつけていても指定する部分を間違えてしまいました。

このような場合には一度print文で抜き出した部分を表示させるのが良いとわかりました。 何が抜き出されているのかわからないままコードを書いていてもどこで間違ったのかがわかりません。視覚的に確認できるよう、一度表示させてから書き進めるのが確実です

まとめ

今までと違った数え方でプログラムを書くためには慣れが必要そうです。慣れるまでは都度確かめながら書き進めるのがいいかもしれません。

もし、思った動きにならなかったりエラーが出てしまったりしても落ち着いて対処できるようにすることが大切です。

今回のようなインデックス指定、スライスを使った時にどこが間違っているかわからないときは、print文などを用いて目に見えるよう表示して確かめるのがいいでしょう。

プロのエンジニアもどこでうまく動かないのかわからなかった場合は1つ1つ確かめているようです。 次のブログは今回のスライスについて動きが思ったようにならなかった時に、とても参考になりました。

blog.pyq.jp

Copyright ©2017- BeProud Inc. All rights reserved.