파이썬 조각에 대한 철저한 이해

 

올린 사람 : HTTPS : //www.jianshu.com/p/15715d6f4dad

파이썬를 사용하는 과정에서 흔히 객체의 값의 특정 부분에서 추출 상황의 발생, 실질적인 문제를 해결하는, 그것은이 동작을 완료하기 위해 강력한 무기 슬라이싱을 위해 설계된다. 이론적으로 한 적절한 조건식으로서, 임의의 단일 또는 다수의 목표 슬라이스 절단에 의해 달성 될 수있다. 내부 로직은 또한 오류가 매우 경향, 숨겨진 것보다 때로는 더 깊은이 오류가 어려운 감지 할 경우 기본 구문 슬라이싱 작업은 비교적 간단하지만 완전히 명확하지 않다. 이 문서에서는 다양한 작업에 펠릿의 자세한 예를 요약 한 것입니다. 오류 및 부적절 나에게 다니엘를 해결하십시오!

첫째, 슬라이스 할 수 색인 파이썬 객체

상기 두 부분의 양 및 음의 인덱스 지수 같이에게 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 실시 예 :

 
파이썬 색인 .JPG

슬라이스 파이썬의 작동 둘째, 일반 모드

완전한 발현 개의 슬라이스를 포함 ":", 세 개의 파라미터 (START_INDEX, END_INDEX 단계)를 분리하는 경우에만 ""= 세 번째 단계 (1)의 디폴트 파라미터.

切片操作基本表达式:object[start_index:end_index:step] 

단계 : 양수와 음수를 사용할 수의 절대 값은 데이터 '단계 절단 방향 ", 그리고는의 부호를 결정한다", "N 나타내는 「왼쪽에서 오른쪽 때"값을, 음극 나타내는 "컷오프 판정에서을 오른쪽에서 왼쪽으로 절단 방향 중요 "값. 단계가 생략되는 경우, 디폴트, 즉 1의 값. 단위로 왼쪽에서 오른쪽으로는, 1"! ""잘라 방향은 매우 중요합니다! ""잘라 방향은 매우 중요합니다! "중요한 것은 세 번 대답!

START_INDEX (인덱스 자체를 포함하여) 시작 인덱스를 나타내는 상기 "시작점"또는 "대상"처럼 시작 개체 "종점"시작 값으로부터,이 인수를 생략를, 양 및 음의 파라미터 단계에 의해 결정 음의 "끝"에서 "시작점"처음부터 긍정적 인 단계입니다 시작했다.

END_INDEX : 종단 인덱스 (색인 자신은 포함하지 않는다)를 나타내는 상기 인자가 생략 된 경우 "시작점"또는 "종점"단계에 의해 결정되는 동일한 양 및 음의 변수이기 때문에, 데이터까지를 고려하여, "END"를 나타내고, 스텝 은 "끝"까지 타이밍이 될 때까지 부정적이다 "출발점."

세, 슬라이스 작업의 파이썬 자세한 예

다음 예는리스트 A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 실시 예 :

>>>a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
1. 컷 하나의 값
>>>a[0] >>>0 >>>a[-4] >>>6 
2. 전체 개체를 잘라
>>>a[:] #从左往右 >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>a[::]#从左往右 >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>a[::-1]#从右往左 >>> [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
3. START_INDEX 및 END_INDEX는 모두 양 (+)의 인덱스 케이스입니다
>>>a[1:6] >>> [1, 2, 3, 4, 5] step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。 
>>>a[1:6:-1] >>> [] 输出为空列表,说明没取到数据。 step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾,所以为空。 
>>>a[6:1] >>> [] 同样输出为空列表。 step=1,决定了从左往右取值,而start_index=6到end_index=1决定了从右往左取值,两者矛盾,所以为空。 
>>>a[:6] >>> [0, 1, 2, 3, 4, 5] step=1,从左往右取值,从“起点”开始一直取到end_index=6。 
>>>a[:6:-1] >>> [9, 8, 7] step=-1,从右往左取值,从“终点”开始一直取到end_index=6。 
>>>a[6:] >>> [6, 7, 8, 9] step=1,从左往右取值,从start_index=6开始,一直取到“终点”。 
>>>a[6::-1] >>> [6, 5, 4, 3, 2, 1, 0] step=-1,从右往左取值,从start_index=6开始,一直取到“起点”。 
(-) 4. START_INDEX 완전하고 부정적인 END_INDEX 경우 여기서 인덱스
>>>a[-1:-6] >>> [] step=1,从左往右取值,而start_index=-1到end_index=-6决定了从右往左取值,两者矛盾,所以为空。 索引-1在-6的右边(如上图) 
>>>a[-1:-6:-1] >>> [9, 8, 7, 6, 5] step=-1,从右往左取值,start_index=-1到end_index=-6同样是从右往左取值。 索引-1在6的右边(如上图) 
>>>a[-6:-1] >>> [4, 5, 6, 7, 8] step=1,从左往右取值,而start_index=-6到end_index=-1同样是从左往右取值。 索引-6在-1的左边(如上图) 
>>>a[:-6] >>> [0, 1, 2, 3] step=1,从左往右取值,从“起点”开始一直取到end_index=-6。 
>>>a[:-6:-1] >>> [9, 8, 7, 6, 5] step=-1,从右往左取值,从“终点”开始一直取到end_index=-6。 
>>>a[-6:] >>> [4, 5, 6, 7, 8, 9] step=1,从左往右取值,从start_index=-6开始,一直取到“终点”。 
>>>a[-6::-1] >>> [4, 3, 2, 1, 0] step=-1,从右往左取值,从start_index=-6开始,一直取到“起点”。 
하이브리드 인덱스의 경우 - 5. START_INDEX의 END_INDEX 및 양극 (+)과 음극 ()
>>>a[1:-6] >>> [1, 2, 3] start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值,因此结果正确 
>>>a[1:-6:-1] >>> [] start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾,因此为空。 
>>>a[-1:6] >>> [] start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾,因此为空。 
>>>a[-1:6:-1] >>> [9, 8, 7] start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值,因此结果正确。 
직렬 섹션 6. 작동
>>>a[:8][2:5][-1:] >>> [4] 相当于: a[:8]=[0, 1, 2, 3, 4, 5, 6, 7] a[:8][2:5]= [2, 3, 4] a[:8][2:5][-1:] = 4 理论上可无限次连续切片操作,只要上一次返回的依然是非空可切片对象。 
제 세 파라미터 연산 식 슬라이싱 사용될 수있다
>>>a[2+1:3*2:7%3] >>> [3, 4, 5] 即:a[2+1:3*2:7%3] = a[3:6:1] 
8. 다른 목적 슬라이싱

상기 설명 조각화하는 예시적인 목록으로 기재하여야하지만, 실제로 수행 될 수있는 동작들의 데이터 슬라이스 타입은 튜플, 스트링 등을 포함하는 많은있다.

>>> (0, 1, 2, 3, 4, 5)[:3] >>> (0, 1, 2) 元组的切片操作 
>>>'ABCDEFG'[::2] >>>'ACEG' 字符串的切片操作 
>>>for i in range(1,100)[2::3][-10:]: print(i) 就是利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。 

넷째, 일반적인 슬라이싱 작업

목록 : A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 상기 오브젝트의 설명을

심지어 포지션을 취하십시오
>>>b = a[::2] [0, 2, 4, 6, 8] 
홀수 위치를 취합니다
>>>b = a[1::2] [1, 3, 5, 7, 9] 
3. 전체 개체를 복사
>>>b = a[:] #★★★★★ >>>print(b) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>print(id(a)) #41946376 >>>print(id(b)) #41921864 或 >>>b = a.copy() >>>print(b) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>>print(id(a)) #39783752 >>>print(id(b)) #39759176 

[: 즉 주 및 .copy ()이다 "얕은 복사"만 복사 소자 최 내측 부재는 오히려 별도의 메모리를 할당하는 대신에 참조로 중첩된다.

>>>a = [1,2,['A','B']] >>>print('a={}'.format(a)) >>>b = a[:] >>>b[0] = 9 #修改b的最外层元素,将1变成9 >>>b[2][0] = 'D' #修改b的内嵌层元素 >>>print('a={}'.format(a)) >>>print('b={}'.format(b)) >>>print('id(a)={}'.format(id(a))) >>>print('id(b)={}'.format(id(b))) a=[1, 2, ['A', 'B']] #原始a a=[1, 2, ['D', 'B']] #b修改内部元素A为D后,a中的A也变成了D,说明共享内部嵌套元素,但外部元素1没变。 b=[9, 2, ['D', 'B']] #修改后的b id(a)=38669128 id(b)=38669192 
4. 개별 요소를 수정
>>>a[3] = ['A','B'] [0, 1, 2, ['A', 'B'], 4, 5, 6, 7, 8, 9] 
5. 특정 위치의 요소를 삽입
>>>a[3:3] = ['A','B','C'] [0, 1, 2, 'A', 'B', 'C', 3, 4, 5, 6, 7, 8, 9] >>>a[0:0] = ['A','B'] ['A', 'B', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
요소의 제 대안 일부
>>>a[3:6] = ['A','B'] [0, 1, 2, 'A', 'B', 6, 7, 8, 9] 

V. 요약

(A) START_INDEX, END_INDEX 단계는 서명을 조합하여 사용될 수 있으며, 동일한가 음수, 양수 둘 수있다. 그러나 원칙을 준수해야합니다, 그렇지 않으면 제대로 차단하는 것은 불가능 데이터 : START_INDEX 위치를 잘 값에 왼쪽에서 보여 END_INDEX을 떠날 때 때, 다음 단계는 (왼쪽에서 오른쪽으로 같은 대표) 긍정적해야 할 때 START_INDEX의 위치 END_INDEX 오른쪽에서 왼쪽으로의 값을 도시하는, 오른쪽에,이 시간 간격은 음극 (대표 같은 오른쪽에서 왼쪽), 즉, 양의 값의 순서가 동일해야해야한다. 특별한 경우, START_INDEX의 END_INDEX 또는 생략 시작 인덱스 및 종료 인덱스에 대한 포지티브 및 네거티브 단계에 의해 결정되며, 충돌이 존재하지 않는 경우의 값 방향 (즉, 빈리스트 []를 리턴하지 않음)하지만, 포지티브 및 네거티브를 취할 A가 좌우하기 때문에 결과는 완전히 다르다.

슬라이스를 사용하는 경우 (B)에서, 양극과 음극의 공정 단계를 생략 특히 고려되어야한다. A는 [-1 :] 등 = [0, 1, 2, 3, 4, 5, 6, 7, "대상"착각하기 쉬운 "은 시작점", 즉 [-1]를 얻기 시작 , 8, 9, 그러나 사실상 A는 [-1 :] 자체가 대부분이다 [-1] = 9, 단계 = 1에서 나타내어지는 값이 왼쪽에서 오른쪽 때문에 동안 시작 색인 START_INDEX = -1 객체 = 우측의 요소는, 그 권리가없는 데이터가 없도록 단지 [-1] 소자

추천

출처www.cnblogs.com/bsduan/p/11599719.html