slicing insert question, L[1:1]

前端 未结 3 895
自闭症患者
自闭症患者 2021-01-14 16:18

practising some python, which is a pretty easy language to grab up.

I have

>>> L = [1,2,3,4]
>>> L[1:1] = [1,2,3]
>>> L
[1         


        
相关标签:
3条回答
  • 2021-01-14 16:30

    Slicing behaves differently depending on whether it's on the left- or right-hand side of an expression. When it's on the left side, it doesn't return a list - instead, it behaves as a slice object, which knows more about slices and has assignment specifically overridden to operate as insertion.

    0 讨论(0)
  • 2021-01-14 16:34

    L[1:1] means the slice of the list L starting at index 1 (the second element), up to but not including index 1. So it is an empty list. On the right-hand side of an assignment, it is simply an anonymous empty list. But on the left-hand side, the assignment knows where the slice has been made, and can splice in the new list value into the proper place.

    0 讨论(0)
  • 2021-01-14 16:53

    The official Python Tutorial explains it best, in my opinion. The end of Chapter 3.1.2 has the following diagram:

     +---+---+---+---+---+
     | H | e | l | p | A |
     +---+---+---+---+---+
     0   1   2   3   4   5
    

    What this illustrates is that you can think of the indices as pointing BETWEEN the elements. So in this illustration, if specifying a slice [1:1], you are actually referring to the space between H and e, but not including them.

    If you wanted to overwrite H and e, you would specify the slice [0:2].

    0 讨论(0)
提交回复
热议问题