私はPythonを初めて使用し、スライス表記について読んでいるときに、次のコードスニペットに出くわしました。非常に簡単な例では理解して使用することができましたが、次の例ではその使用法を理解できませんでした。どんな説明も本当に役に立ちます!
>>> a = [1,2]
>>> a[1:1] = [3,4,5]
>>> print a
[1, 3, 4, 5, 2]
>>> a = [1,2]
>>> a[0:1] = [3,4,5]
>>> print a
[3, 4, 5, 2]
私はPythonを初めて使用し、スライス表記について読んでいるときに、次のコードスニペットに出くわしました。非常に簡単な例では理解して使用することができましたが、次の例ではその使用法を理解できませんでした。どんな説明も本当に役に立ちます!
>>> a = [1,2]
>>> a[1:1] = [3,4,5]
>>> print a
[1, 3, 4, 5, 2]
>>> a = [1,2]
>>> a[0:1] = [3,4,5]
>>> print a
[3, 4, 5, 2]
a[n:m] = b
# is essentially* equivalent to
a = a[:n] + b + a[m:]
a[n:m]
これを「replacewith」と読むことができますb
(以降a = a[:n] + a[n:m] + a[m:]
)。
*実際にスライスすると、リストがインプレースで変更されます(つまり、id(a)
変更されません)。これは通常は望ましいことです(設定a=
によって新しいa
メモリの場所が作成されます)。
だからあなたの例では:
a = [1,2]
#a[1:1] = [3,4,5]
a = a[:1] + [3,4,5] + a[1:]
# [1] [2]
[1, 3, 4, 5, 2]
a = [1,2]
#a[0:1] = [3,4,5]
a = a[:0] + [3,4,5] + a[1:]
# [] [2]
[3, 4, 5, 2]
a[1:1]
リストの最初の要素と2番目の要素の間の位置にある空のスライスです。
つまり、「リストの最初の要素の後にa[1:1] = [3,4,5]
要素を挿入する」という意味です。3,4,5
a[0:1]
リストの最初の要素から2番目の要素までのスライスです(ただし、これは除外されます)。
つまりa[0:1] = [3,4,5]
、「リストの最初の要素を要素に置き換える」という意味3,4,5
です。
おそらく、この視覚化は次のことに役立ちます。
| h | e | l | l | o | <-- string "hello"
0 1 2 3 4 5 <-- slice positions
^---^ <-- slice [0:1]: "h"
^ <-- slice [1:1]: ""