답변:
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
파이썬은이 개념을 "슬라이스"라고 부르며 단순한 문자열 이상에서 작동합니다. 포괄적 인 소개를 보려면 여기 를 살펴보십시오 .
아무도 언급하지 않았기 때문에 완전성을 위해. 배열 슬라이스에 대한 세 번째 매개 변수는 단계입니다. 따라서 문자열을 뒤집는 것은 다음과 같이 간단합니다.
some_string[::-1]
또는 대체 문자를 선택하면 다음과 같습니다.
"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"
문자열을 앞뒤로 이동하는 기능은 슬라이스를 시작 또는 끝에서 배열 할 수 있도록 일관성을 유지합니다.
Substr ()은 일반적으로 (예 : PHP 및 Perl) 다음과 같이 작동합니다.
s = Substr(s, beginning, LENGTH)
따라서 매개 변수는 beginning
및 LENGTH
입니다.
그러나 파이썬의 행동은 다릅니다. END (!) 다음에 시작과 끝이 예상됩니다. 초보자에게는 눈에 잘 띄지 않습니다. 따라서 Substr (s, starting, LENGTH)의 올바른 대체는
s = s[ beginning : beginning + LENGTH]
s[beginning:][:length]
전체 (얕은) 사본 인 한 가지 예가 여기서 누락 된 것 같습니다.
>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>
이것은 시퀀스 유형의 사본 (인턴 된 문자열이 아님)을 작성하는 데 사용되는 일반적인 관용구입니다 [:]
. 얕은 목록을 복사, 명백한 이유없이 사용되는 파이썬 목록 조각 구문을 참조하십시오 .
a=b
충분해야합니다.
[:]
불변 유형에서는 전혀 복사하지 않습니다. 하지만 mysequence[:]
때 대부분 무해 mysequence
같은 불변의 유형 str
, tuple
, bytes
(Py3) 또는 unicode
(Py2가), a = b[:]
상응하는 것입니다 a = b
, 그냥 슬라이싱 바이트 코드 파견 약간의 시간을 낭비하는 얕은 복사 할 때 그것의 의미가 있기 때문에 그 자체를 반환하여에 객체 응답 객체 신원 테스트 외에도 불변의 자기에 대한 다른 참조를 반환하는 것과 같습니다.
s[:]
하지 마십시오 s = 'abc'; s0 = s[:]; assert s is s0
. 그렇습니다.리스트가 나올 때까지 파이썬에서 목록을 복사하는 관용적 방법 list.copy
이지만 불변 유형의 전체 조각은 변경할 수 없기 때문에 사본을 만들 이유가 없으므로 메모리에 하나만있을 수 있습니다. 우리는 그것을 복사하는 데 시간을 낭비해서는 안됩니다. 이 답변이 잘못되어 질문에 대답조차하지 않기 때문에 삭제해야합니까?
파이썬에서 문자열을 부분 문자열로 묶어 세 번째 문자에서 문자열 끝까지 새로운 문자열을 얻는 방법이 있습니까?
어쩌면
myString[2:end]
?
예, 이름 을 상수 싱글 톤에 할당하거나 바인딩 하면 실제로 작동합니다 .end
None
>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'
슬라이스 표기법에는 3 가지 중요한 인수가 있습니다.
제공되지 않을 때의 기본값은 다음과 None
같습니다.
>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'
두 번째 부분을 떠나는 것이 '끝까지'를 의미한다면, 첫 번째 부분을 떠나면 처음부터 시작됩니까?
예, 예를 들면 다음과 같습니다.
>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'
슬라이스에 start를 포함 시키지만 stop까지는 포함하지 않습니다.
단계가 None
이면 기본적으로 슬라이스가 1
단계에 사용됩니다. 음의 정수로 밟으면 파이썬은 끝에서 시작으로 갈만큼 똑똑합니다.
>>> myString[::-1]
'0987654321'
슬라이스 표기법 질문 설명에 대한 답변 에서 슬라이스 표기법을 자세히 설명합니다.
토론에 두 가지 요점을 추가하고 싶습니다.
None
빈 공간에서 대신 "시작부터"또는 "끝까지"를 지정할 수 있습니다 .
'abcde'[2:None] == 'abcde'[2:] == 'cde'
이것은 빈 공간을 인수로 제공 할 수없는 함수에 특히 유용합니다.
def substring(s, start, end):
"""Remove `start` characters from the beginning and `end`
characters from the end of string `s`.
Examples
--------
>>> substring('abcde', 0, 3)
'abc'
>>> substring('abcde', 1, None)
'bcde'
"""
return s[start:end]
파이썬은 슬라이스 객체를 가지고 있습니다 :
idx = slice(2, None)
'abcde'[idx] == 'abcde'[2:] == 'cde'
myString에 오프셋 6에서 시작하고 길이가 9 인 계정 번호가있는 경우 다음과 같이 계정 번호를 추출 할 수 있습니다. acct = myString[6:][:9]
.
OP가 승인하면 실험적인 방식으로 시도해 볼 수 있습니다.
myString[2:][:999999]
작동합니다-오류가 발생하지 않으며 기본 '문자열 패딩'이 발생하지 않습니다.
myString[offset:][:length]
당신은 그냥 사용할 수있는 영업 이익의 경우myString[offset:][:]
어쩌면 나는 그것을 놓쳤지만 변수에 대해서는 더 이상 논의하지 않기 때문에이 페이지에서 원래 질문에 대한 완전한 답변을 찾을 수 없었습니다. 검색을 계속해야했습니다.
아직 댓글을 달 수 없으므로 여기에 내 결론을 추가하겠습니다. 이 페이지에 액세스 할 때 관심이있는 유일한 사람은 아니라고 확신합니다.
>>>myString = 'Hello World'
>>>end = 5
>>>myString[2:end]
'llo'
첫 번째 부분을 떠나면
>>>myString[:end]
'Hello'
그리고 중간에 :을 남겨두면 가장 간단한 하위 문자열을 얻습니다.이 문자열은 5 번째 문자입니다 (0으로 시작하는 카운트 이므로이 경우 공백입니다).
>>>myString[end]
' '
글쎄, PHP 스크립트를 Python으로 변환 해야하는 상황이 있었고 많은 사용법이 substr(string, beginning, LENGTH)
있었습니다.
파이썬을 선택했다면 많은 최종 색인 string[beginning:end]
을 계산해야 하므로 더 쉬운 방법을 사용 하는 것이 많은 어려움을 겪었습니다.string[beginning:][:length]
하드 코딩 된 인덱스 자체를 사용하는 것은 혼란 스러울 수 있습니다.
이를 피하기 위해 Python은 내장 객체를 제공합니다 slice()
.
string = "my company has 1000$ on profit, but I lost 500$ gambling."
돈이 얼마나 남았는지 알고 싶다면
일반적인 해결책 :
final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500
슬라이스 사용하기 :
EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500
슬라이스를 사용하면 가독성이 향상됩니다.