Pythonスライス小結

4287 ワード

Pythonでlistまたはtupleの要素の一部を取るのは非常に一般的な操作です
>>>L = []
>>>for i in range(100):
    L.append(i)

Lで指定した要素をどのように取り出しますか?皆さんはL[0]、L[1]、L[2]...を思い浮かべるはずです.
>>> L[0],L[1],L[2]
(0, 1, 2)

もし私たちがある範囲の要素を取り出したいならば、ここでもし私たちがL[10]~L[30]の間の要素を取り出したら、もしあなたがC言語を学んだことがあるならばまず循環を考えるべきです
>>> for i in range(10,20):
        print(L[i])


10
11
12
13
14
15
16
17
18
19

しかしPythonでは、スライスがより便利で簡潔な方法があります.L[10]~L[30]の間の要素を取るには,一言のコードで完成する.
>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

上位10要素をとる
>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

最後の10要素をとる
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

最初の20要素は、2つごとに1つずつ取ります.
>>> L[:20:2]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

さっきスライスで取ったlistの要素を使いましたが、スライスはtupleにも適用されます.
>>> t = (1,2,3,4,5,6)
>>> t[:7]
(1, 2, 3, 4, 5, 6)
>>> t[:]
(1, 2, 3, 4, 5, 6)
>>> t[::2]
(1, 3, 5)
>>> t[-7:]
(1, 2, 3, 4, 5, 6)

スライス操作の結果もtuple
リストをコピーするには、まずこの操作を見てみましょう.
L1 = [] for i in range(100): L1.append(i)print(L 1)[0,1,2,3,4,5,6,7,8,9]L 2=L 1 print(L 2)[0,1,2,3,4,5,6,7,8,9]出力L 1,L 2値と同様にコピーに成功したことを示しますか?いいえ、ありません.次にL 2を見ます.append(10)print(L 2)[0,1,2,3,4,5,6,7,8,9,10]print(L 1)[0,1,2,3,4,5,6,7,8,9,10]私たちはL 2に1つの要素を追加しただけで、なぜL 1にも1つの要素が増えたのか、突然悟ったのではないでしょうか.彼らは同じメモリを指して何も書かない[:]listまたはtupleテストをコピーすることができます:L 1=[]for i in range(10):L 1.append(i)
L2 = L1[:] print(L1) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(L2) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] L2.append(10) print(L2) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(L1) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
tupleはlistと同じです