section , It's like bread , Give me a few knives , Cut it into pieces , It can be made into toast , You can also make sandwiches , Better taste :

list (list)、 Tuples (tuple)、 character string (str) Can be sliced , Get the sub segment , Actually slicing is much more powerful than you think , Can take value , It can also assign values .

Ignore the last element

Slices are described by subscripts and colons , such as s[2:13]. about 2, 3, ..., 12 This sequence , Expressed as [2, 13), Left closed right away , Than [2, 12] and (1, 13) It's more reasonable , For the following reasons :

  1. The upper limit minus the lower limit equals the number of elements , such as 13 - 2 = 11, Just in time 11 Elements .
  2. Continuous ranges don't overlap , such as [2, 13) and [13, 25) It's two consecutive ranges ,13 It will only be included in the latter one .

Subscript from 0 Start

about 10 Elements , It's written in [0, 10) Than [1, 11) More reasonable , For the following reasons :

  1. N Elements ,[0, N) Than [1, N+1) It's more concise , Unwanted +1.

  2. The subscript of an element is equal to the number of elements in front of it , Easy to use , such as :

    0 1 2 3 4 5 6 7 8 9
    ^
    There is 4 Elements

Good slicing

The above two mathematical theories bring a lot of benefits to the use of slicing :

  • When there is only the last location information , You can quickly see that there are several elements , such as my_list[:3] return 3 Elements .

  • When the start and stop position information is visible , You can quickly calculate the length , use stop - start That's all right. , such as my_list[1:3] The length is 2.

  • Use any subscript to cut the sequence into two non overlapping parts , Just write my_list[:x] and my_list[x:] That's all right. , such as

    >>> my_list = [10, 20, 30, 40, 50, 60]
    >>> my_list[:3]
    [10, 20, 30]
    >>> my_list[3:]
    [40, 50, 60]

Python In the range of (range) Also ignore the last element , Subscript from 0 At the beginning .

Slice interval

Except for s[a:b], And a third subscript s[a:b:c], It means right s stay a and b Between c Value... For interval ,c It can also be negative , A negative value means a negative value . such as :

>>> s = "bicycle"
>>> s[::3]
"bye"
>>> s[::-1]
"elcycib"
>>> s[::-2]
"eccb"

a:b:c A more precise description is start:stop:step.

The grammar is so simple , I think it's with my feet Python What magic does ! In the face of s[a:b:c] When you evaluate it ,Python It actually calls s.__getitem__(slice(a, b, c)), Familiar formula , Familiar taste .slice(a, b, c) yes a:b:c Use in [] The slice object returned in ,slice() yes Python Built in functions , Example :

invoice = "Mini Kit $34.95 1 $ 34.95"
SKU = slice(0, 8)
print(invoice[SKU])

Slice assignment

A powerful function of slicing is to assign values to slices , If you put the slice on the left side of the assignment statement , Or take it as del Object of operation , We can graft the sequence 、 Removal or local modification operations . Example :

>>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del l[5:7]
>>> l
[0, 1, 2, 3, 4, 7, 8, 9]
>>> l[3:2] = [11, 22]
>>> l
[0, 1, 2, 11, 22, 3, 4, 7, 8, 9]
>>> l[2:5] = [100]
>>> l
[0, 1, 100, 3, 4, 7, 8, 9]

Be careful , If the assigned object is a slice , Then the right side of the assignment statement must be an iteratable object , Even if there's only a single value , Otherwise, an error will be reported :

>>> l[2:5] = 100
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: can only assign an iterable

Multi slice

Except for one-dimensional slices ,Python It also supports multidimensional slicing , This is reflected in multidimensional arrays .NumPy yes Python Third party Library , Provides high order arrays , bring Python Become the mainstream language of scientific computing applications . Example :

>>> import numpy
>>> a = numpy.arange(12)
>>> a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.shape
(12,)
>>> a.shape = 3, 4
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>> a[:, 1]
array([1, 5, 9])
>>> a[1:2, 2:3]
array([[6]])
>>> a[1:3, 2:4]
array([[ 6, 7],
[10, 11]])

stay NumPy in , Ellipsis ... Used as a shortcut to slice multidimensional arrays , If x It's a four-dimensional array , that x[i, ...] Namely x[i, :, :, :] Abbreviation , such as :

>>> a.shape = 2, 2, 3
>>> a
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
>>> a[:, :, 1]
array([[ 1, 4],
[ 7, 10]])
>>> a[..., 1]
array([[ 1, 4],
[ 7, 10]])

Summary

This paper introduces Python Powerful slicing operation , Because ignoring the last element and subscript from 0 Start , So slicing is easy to use , Except for the beginning and the end , You can also set the slice interval , If the interval is negative, the value can be reversed . Slice assignment is another powerful function of slicing , Note that the right side of the assignment statement must be an iteratable object .

Reference material :

《 smooth Python》

https://blog.wz52.cn/archives/174.html

Can take value also can assign value Python More about slicing

  1. div assignment , Value and input assignment , Value

    One .div Value <div id="txtXiaofei" class="txt-panel"> Hello </div> obtain div Value $(&qu ...

  2. input Tag element ,value Attribute value problem , assignment

    verification val:<input type="text" id="id" name="name" value=" Null value "&g ...

  3. jquery radio Value Deselect assignment

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. jquery input Assignments and values

    Make a note of : Writing a input assignment , Without saying a word, I directly used $('#xx').val() To take values and assign values , Value ok, Use after assignment alert The display is correct , But in html It doesn't show up right on the screen , Later, the following code was used instead ...

  5. Python: High level theme ( Property value and assignment process 、 property descriptor 、 Decorator )

    Python: High level theme ( Property value and assignment process . property descriptor . Decorator ) background To study the Javascript Just know the original property value and assignment operation access “ Location ” It may be different . And lexical scope , This is also the way I learn any language ...

  6. Python_ Research on the value of variable assignment under multithreading

    Research on the value of variable assignment under multithreading by: Give the guest QQ:1033553122 1. Code practice 1 #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...

  7. jQuery radio Value and assignment of

    Value : $("input[name='radioName']:checked").val(); assignment : $("input[name='radioName'][value= ...

  8. python Changing the value of a variable through a function

    Strictly speaking, it should be " Call through function , Change the reference object ".python in , Distinguish " Variable name " and " object " If it's an object of a class , Is of reference type , Then you can call through the function , ...

  9. CYQ.Data Rapid development of UI( assignment 、 Value 、 binding ) principle

    The monkey in the garden asked me a few questions last night CYQ.Data Small problems in use , After a brief answer , He said “ Mother no longer has to worry about my study ", And encourage after the event , I hope this framework goes better and better . In addition to technical exchanges , Both sides are living ,S On the above question, too ...

  10. jquery select Value , Assignment operation

    select">jquery select Value , Assignment operation One . obtain Select obtain select Selected text : $("#ddlRegType").find( ...

Random recommendation

  1. ubuntu System installation initialization script

    ubuntu System installation initialization script Install and uninstall frequently ubuntu, Every time the system is installed, a lot of software will be installed , It's troublesome and time-consuming to lose orders one by one , One sh All the papers are done ! 1. flashplayer download : Click here 2. Auda ...

  2. js isArray

    function isArray(value) { if (typeof Array.isArray === "function") { return Array.isArray( ...

  3. Mybatis Relational query , The number of records queried is not consistent with the direct query in the database , How to solve ?

    <select id="findUserInfoListForMap"    resultMap="BaseResultMap">  SELECT  ...

  4. Python Input output exercises , Arithmetic exercises ,turtle Preliminary practice

    Hello World! Simple interaction ( Interactive , Document type ) The teaching material P19 radius=25 area=3.1415*radius*radius print(area) print('{:.2f}'.forma ...

  5. EF Batch add to modify Delete

    1 Batch addition     db.T_Investigator.AddRange(list) 2 Batch deletion     db.T_Investigator.RemoveRange(list) 3 Bulk changes    for Follow ...

  6. Asp.Net Core Global model validation

    public class ActionFilter : IActionFilter { /// <summary> /// action Perform before /// </summary> ...

  7. MFC In the settings dialog / The form size is fixed

    Dialog box :1. Respond to WM_GETMINMAXINFO news ( Set up lpMMI->ptMinTrackSize and lpMMI->ptMaxTrackSize)2. The response message WM_SYSCOMMAND, screen ...

  8. poj1015 Jury Compromise【 knapsack 】

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:32355   Accepted:8722   ...

  9. It's the algorithm BFPRT Algorithm

    Original link :http://noalgo.info/466.html BFPRT Algorithm , The median algorithm, also known as median , from 5 A big bull (Blum . Floyd . Pratt . Rivest . Tarjan) carry ...

  10. [06] The box model + auto In the middle + Merge vertically

    1. The box model There are two kinds of box models , Namely ie Box models and standards w3c Box model . standard (W3C) In the model :CSS The width of the middle (width) = Content (content) The width of CSS The width of the middle (width) = Content ( ...