2013-03-20 2 views
12

파이썬 할당 작업 중 [: -1]은 다음 코드의 의미에서 무엇을 의미하는지 궁금합니다. instructions = f.readline()[:-1][: -1]은 파이썬에서 무엇을 의미합니까?

여기에서 S.O. Google에서는 사용할 수 있지만 아무 소용이 없습니다. 설명을 좋아할 것입니다!

+0

때로는 -1이 일련의 사물의 끝을 표현하는 데 사용됩니다. 내 추측은 처음부터 끝까지 읽는 것을 의미합니다 (다만 공식적인 대답은 아닙니다). – Daedalus

+0

"나는 ..."맥락에서, 당신과 특히 Pavel Anossov가 대답 한 부분이기 때문에 그것이 dup 인지는 잘 모릅니다. – abarnert

답변

21

그것은이 경우, 마지막 문자를 생략 할 개행 문자를 문자열을 조각의 마지막 요소를 의미한다 빈 문자열에서도 공백 문자가 있으면 마지막 문자를 제거하는 것이 안전합니다.

>>> ''[:-1] 
'' 

이것은 문자열뿐만 아니라 모든 순서에서 작동합니다.

+1

It * sequence * 슬라이스 - 문자열 일 수 있습니다. –

+1

감사합니다. 완전한. 그것이 가능할 때이 대답을 "확인"할 것입니다. –

+0

흠, 타이핑에 어리석은 얼굴로 사용하겠다고 생각합니다! [: -1] – Stephen

1

목록의 모든 요소 (또는 문자열의 문자)가 아니라 마지막 요소를 가져옵니다. 이 작품 이후

>>> 'test\n'[:-1] 
'test' 

:

: 목록 -1를 통과 나타냅니다하면 목록

+2

혼동을 줄 정도로 모호하게 작성되었습니다. 마지막 요소는 포함하지 않고 모든 요소를 ​​포함합니다. (슬라이스/범위/등이 파이썬에서 어떻게 작동하는지 이미 알고 있다면 -1이 마지막 요소가 필요한 모든 것을 알려주고 있음을 알지만, 그렇지 않으면 여전히이 대답 이후에는 안됩니다.) – abarnert

7

시퀀스의 마지막 요소를 제외한 모든 요소를 ​​선택합니다. 리스트를 이용하여 아래

예 :

In [15]: a=range(10) 

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

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

* sequence *를 조각으로 만듭니다. 단지 목록 일뿐입니다. –

13

이 "시퀀스의 모든 요소들 그러나 마지막"를 의미한다. 문맥에서 f.readline()[:-1] 그것은 "나는 줄 바꿈이 끝나고 그 줄을 긋고 싶다는 것을 확신한다"는 것을 의미합니다.

+0

Martijn Pieters의 답변은 좀 더 상세하고 설명 적이지만, 나는 OP의 "... 컨텍스트에서 ..."부분에 응답하여'[: -1]'을'readline'과 함께 사용하는 관용구를 직접적으로 묘사하는 것을 좋아합니다. (여러분 모두에게 +1하십시오.) – abarnert

+0

이 가정을하는 것이 위험 할 수 있습니다. 심지어 줄 끝 표식을 한 문자로 예상하는 시스템에서도 - 파일의 마지막 줄에 새 라인이 누락 된 경우는 드문 일이 아닙니다. 이것은 파이썬이 관련되어있을 때 특히 그렇습니다. 이전에''\ n '.join (lines)'이 사용 된 것을 보았습니다. 그러면 정확히 이런 일이 일어나고 데이터 문자를 잃게됩니다. – DSM

관련 문제