NaaN日記

やったこと、覚えたことを発信する場

スライス(Python)

今回はスライスについて。
スライスを使うと、リストやタプルの要素、文字列の範囲を指定して、
必要な部分だけを取り出すことができる。

[start:stop]
num = {1,2,3,4,5,6,7,8,9}
print(num[2:5]) #num[2]からnum[4]まで
#[3, 4, 5]

また、

print(num[-1])
#9

であり、スライスでも負の値で場所を指定できる。

print(num[1:-1]) #num[1]からnum[-2]まで
#[2, 3, 4, 5, 6, 7, 8]
[start:stop:step]

増加量の指定も可能

print(num[1:5:2]) #num[1]からnum[4]まで2ずつ
#[2, 4]


増加量には負の値も指定できる

print(num[5:1:-1]) #num[5]からnum[2]まで1ずつ減少
#[6, 5, 4, 3]
省略

また、全ての範囲で実行したい場合、一つ目のコロンの両端の値を省略できる

print(num[::2])
#[1, 3, 5, 7, 9]

増加量も省略すると、num[0]からnum[-1]まで全ての範囲が表示される

print(num[::]) # ==print(num[:])==print(num)
#[1, 2, 3, 4, 5, 6, 7, 8, 9]

最初の位置を省略

print(num[:0:-1]) #num[-1]からnum[1]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2]

最後の位置を省略

print(num[-1::-1]) #num[-1]からnum[0]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2, 1]

つまり、最初と最後の位置を省略すると

print(num[::-1]) #num[-1]からnum[0]まで1ずつ減少
#[9, 8, 7, 6, 5, 4, 3, 2, 1]

つまり、[::-1]をつかうと逆順に並べ替えることができる
(いまいち活用法が思い浮かびませんが)

使ってみる

例えば、a,b,cと入力してc,b,aと出力したいとき、
スライスを使わずにやってみようとしたらこんなことに

char = input()
moji = list(char)
length = len(moji)
while 0 <= length-1:
    print(moji[length-1], end = '')
    length -= 1

長い!!そして美しくないと怒られそう

スライスを使うととてもコンパクトになる

char = input()
rahc= char[::-1] 
print(rahc)