2014-02-18 3 views
1
In [122]: a = range(10) 

In [123]: a[: : -1] 
Out[123]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

표현식 a [: : -1]을 설명해 주시겠습니까?파이썬에서 목록 반전하기

A [:] 명확하게 이해할 수있다 -> "(콜론 앞 공간)의 시작을 형성 시작하고 (콜론 뒤 공간) 종료 개까지 목록을 검색"

그러나 나는 못하고있는 무슨 두 콜론은 실제로 표현식 a [: : -1]에서 수행합니다.

+0

[결과 \ [:: - 1 \] '의 의미는 무엇입니까?] (http://stackoverflow.com/questions/13365424/what-does-result-1-mean) – geoffspear

+0

내 질문은 : 조금 다릅니다. [124] : a [: : 2] Out [124] : [0, 2, 4, 6, 8] [: : i]에서 i를 단계 크기로 간주하면, 출력은 [start, start + step, start + 2 * step ....]와 같습니다. 그래서 [[: : -1]에서 [0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]과 같아야합니다. 그러나 이것은 그렇지 않습니다. –

+0

http : /stackoverflow.com/questions/509211/pythons-slice-notation –

답변

0

세 번째 인수 (두 개 이후 :)는 단계 크기입니다. -1은 뒤로 물러나는 것으로 해석 될 수 있습니다. 즉, 목록을 반대로 바꾸는 것입니다.

-2 단계 크기 즉, a[::-2]로 시도, 당신은 얻을 것이다 :이 도움이

[9, 7, 5, 3, 1] 

희망을.

더 정교한 답변 여기 Explain Python's slice notation

+0

[124]에서 : a [: : 2] Out [124] : i를 단계 크기로 생각하면 [0, 2, 4, 6, 8] [: : i]에서 출력은 [start, start + step, start + 2 * step .... 등]과 같을 것임이 분명합니다. 그래서 [: : -1]은 [0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]과 같아야합니다. 그러나 이것은 그렇지 않습니다 ... –

+0

단계 크기를 2로 설정하면 인덱스가 2만큼 씩 계산됩니다. 0, 2, 4, 8까지. – Raiyan

+0

@ neel101 : 편집 후 내 의견입니다. [i : i]의 경우 i가 0보다 작 으면 목록의 끝에서부터 계산이 시작됩니다. 즉, start는 0 대신 length_of_list-1입니다. 그래서 우리는 9부터 시작해야합니다. 그럼 8, 7, 6 ... 0 – Raiyan

0

설명 슬라이스는 세 개의 인수, 단지 range 같은 취 시작, 중지 및 단계 :

[0, 1, 2, 3, 4, 5][0:4:2] == list(range(0, 4, 2)) # every second element from 0 to 3 

음 단계를 뒤로을 을 작동하도록 슬라이스의 원인을 반복 가능. 시작 및 정지 (즉, 단계 [::-1])가없는 경우, 역방향으로 진행되므로 마지막부터 시작합니다.