もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

pythonのスライスはこんな機能もあったのかと驚いた

参考サイト

Python-izm

はじめに

こんばんは。

最近pythonにお熱の僕です。

初心者ですが・・・

先日退屈なことはPythonにやらせようを読んでpython勉強した(パート1 python基礎編)pythonの基礎編を勉強してたのですが、そのなかにスライスという機能がありました。

items = ['ドラえもん', 'のび太くん', 'しずかちゃん', 'ジャイアン', 'スネ夫', 'ドラミちゃん', '出来杉君']
print(items[2:4]);

>> ['しずかちゃん', 'ジャイアン']

リストやタプル・文字列から、範囲を指定してデータを取得できる感じかと勝手に思ってたのですが、他にも使い方あるようでした。

参考サイトを見ると、そもそも :を挟んで左側が開始位置、右側は終了位置という2つではなく

sequence[<開始位置>:<終了位置>:<ステップ幅>]

という、3つめの指定があるようでした。

ほーなるほど。とおもい色々と調べてみました。

こんな使い方ある

1つ飛ばしで取得する

items = ['ドラえもん', 'のび太くん', 'しずかちゃん', 'ジャイアン', 'スネ夫', 'ドラミちゃん', '出来杉君', 'のび太ママ', 'のび太パパ', '先生', 'ジャイ子']
print(items[::2]);

>>> ['ドラえもん', 'しずかちゃん', 'スネ夫', '出来杉君', 'のび太パパ', 'ジャイ子']

逆順で取得する

items = ['ドラえもん', 'のび太くん', 'しずかちゃん', 'ジャイアン', 'スネ夫', 'ドラミちゃん', '出来杉君', 'のび太ママ', 'のび太パパ', '先生', 'ジャイ子']
print(items[::-1]);

>>> ['ジャイ子', '先生', 'のび太パパ', 'のび太ママ', '出来杉君', 'ドラミちゃん', 'スネ夫', 'ジャイアン', 'しずかちゃん', 'のび太くん', 'ドラえもん']


message = u'ぼくドラえもん!'
print(message[::-1])

>>> !んもえラドくぼ

最初と最後だけ取得する

items = ['ドラえもん', 'のび太くん', 'しずかちゃん', 'ジャイアン', 'スネ夫', 'ドラミちゃん', '出来杉君', 'のび太ママ', 'のび太パパ', '先生', 'ジャイ子']
print(items[::len(items) - 1]);

>>> ['ドラえもん', 'ジャイ子']


message = u'ぼくドラえもん!'
print(message[::len(message) - 1])

>>> ぼ!

pythonおもしろいYO!

なんか他にも使えるやり方あれば教えてください。