빈 문자열이 split() 결과로 반환되는 이유는 무엇입니까?
의 의미는 무엇입니까?'/segment/segment/'.split('/')
['', 'segment', 'segment', '']
?
비어 있는 요소를 확인합니다.위치 1과 문자열의 맨 끝에 있는 구분 기호로 분할하는 경우 각 끝에서 빈 문자열을 반환하는 것이 어떤 추가 값을 제공합니까?
str.split
보어, 그래서
"/".join(['', 'segment', 'segment', ''])
원래 문자열을 다시 가져옵니다.
빈 문자열이 없는 경우 첫 번째와 마지막'/'
것입니다될종 뒤에 없을 입니다.join()
.
으반빈로환제문으로 된 빈 split()
결과, 함수를 확인할 수 있습니다.
예:
f = filter(None, '/segment/segment/'.split('/'))
s_all = list(f)
돌아온다
['segment', 'segment']
여기서 고려해야 할 두 가지 주요 사항이 있습니다.
- 를 기대하고 있습니다.
'/segment/segment/'.split('/')
['segment', 'segment']
합리적이지만, 그러면 정보가 손실됩니다.한다면split()
당신이 원하는 대로 일했어요, 만약 제가 당신에게 말한다면요.a.split('/') == ['segment', 'segment']
당신은 나에게 무엇을 말할 수 없습니다.a
이었다. - 의 결과는 어떠해야 합니까?
'a//b'.split()
무엇입니까?['a', 'b']
또는['a', '', 'b']
즉, 해야 하는 것은split()
인접 구분 기호를 병합하시겠습니까?문자로 구분된 데이터를 구문 분석하는 것은 매우 어려우며 일부 필드는 비어 있을 수 있습니다.위의 경우 결과에 빈 값을 원하는 사람들이 많다고 확신합니다!
결국 두 가지로 요약됩니다.
일관성: 내가 가지고 있는 경우n
기호, 구기인, 분a
알겠습니다n+1
은 같과니다 뒤에 을 반환합니다.split()
.
복잡한 작업을 수행할 수 있어야 하며 간단한 작업을 쉽게 수행할 수 있어야 합니다. 즉, 결과적으로 빈 문자열을 무시하려면split()
언제든지 할 수 있습니다.
def mysplit(s, delim=None):
return [x for x in s.split(delim) if x]
하지만 빈 값을 무시하고 싶지 않다면 할 수 있어야 합니다.
언어는 하나의 정의를 선택해야 합니다.split()
—모든 사용자의 기본 요구 사항을 충족하기에는 사용 사례가 너무 많습니다.저는 파이썬의 선택이 좋은 선택이고 가장 논리적이라고 생각합니다.(참고로, 내가 C를 좋아하지 않는 이유 중 하나는.strtok()
인접한 구분 기호를 병합하여 심각한 구문 분석/해석을 수행하기가 매우 어렵기 때문입니다.)
예외가 : 한가지예있습다니가외다.a.split()
논쟁 없이 연속적인 공백을 짜내지만, 그 경우에 이것이 옳은 일이라고 주장할 수 있습니다.만약 당신이 그 행동을 원하지 않는다면, 당신은 언제든지 할 수 있습니다.a.split(' ')
.
어떤 종류의 답을 찾고 있는지 잘 모르겠습니다.구분 기호가 세 개이므로 일치하는 항목이 세 개 있습니다.빈 파일을 사용하지 않으려면 다음을 사용합니다.
'/segment/segment/'.strip('/').split('/')
하고 있다x.split(y)
의 을 반환합니다.1 + x.count(y)
@gnibler가 이미 지적했듯이 항목은 귀중한 규칙입니다.split
그리고.join
하는 은 또한 종류의 구분 가 지정된 레코드: , 처방그기구분매포호가레의핑정합니다게하)의 의미를 정확하게 )의 .csv
라인 [[의 순:/etc/group
Unix 등에서는 @Roman의 답변과 같이 절대 경로와 상대 경로(파일 경로 및 URL) 등을 쉽게 확인할 수 있습니다.
또 다른 관점은 정보를 헛되이 창밖으로 던져버리는 것을 원하지 않는다는 것입니다.무엇을 만들면 얻을 수 있을까요?x.split(y)
와동한에 x.strip(y).split(y)
물론 아무것도 아닙니다. 두 번째 양식을 사용하는 것은 쉽지만, 첫 번째 양식이 두 번째 양식을 의미하는 것으로 임의로 간주된다면 첫 번째 양식을 원할 때 해야 할 일이 많을 것입니다(이전 단락에서 지적한 것처럼 드문 일은 아닙니다).
하지만 실제로 수학적 규칙성의 관점에서 생각하는 것은 사용 가능한 API를 설계하는 것을 스스로 배울 수 있는 가장 간단하고 일반적인 방법입니다.예를 , 한 다예를들, 어유한것이에 는 떤효든면라는 것이합니다.x
그리고.y
x == x[:y] + x[y:]
이는 슬라이스의 극단 하나를 제외해야 하는 이유를 즉시 나타냅니다.여러분이 공식화할 수 있는 불변의 주장이 간단할수록, 결과적인 의미론은 여러분이 실생활에서 필요로 하는 것일 가능성이 높습니다. 수학은 우주를 다루는 데 매우 유용하다는 신비로운 사실의 일부입니다.
다음에 대한 불변량을 공식화해 보십시오.split
선행 및 후행 구분자가 특수한 경우를 나타내는 방언...역순서: 문자열 메서드:isspace
간단하지 . -- 최로간않습다니지하단대 --x.isspace()
는 와동합다니등다에 합니다.x and all(c in string.whitespace for c in x)
같은 선도자x and
은 코딩을 하는 을 자주 보게 됩니다.not x or x.isspace()
설계되었어야 했던 단순함으로 돌아가기 위해.is...
문자열 방법(빈 문자열이 원하는 것이라면 무엇이든 할 수 있다 - 거리의 말처럼, 아마도 0 & c와 같은 빈 집합은 항상 대부분의 사람들을 혼란스럽게 했을 것이다;-), 그러나 명백하게 잘 정의된 수학적 상식에 완전히 부합합니다!-).
음, 그것은 당신에게 그곳에 구분자가 있었다는 것을 알려줍니다.결과 4개를 보면 구분 기호가 3개임을 알 수 있습니다.이를 통해 Python이 빈 요소를 삭제하고 필요한 경우 시작 또는 종료 구분자를 수동으로 확인하는 대신 이 정보로 원하는 모든 작업을 수행할 수 있습니다.
간단한 예:절대 파일 이름과 상대 파일 이름을 확인하려고 합니다.이렇게 하면 파일 이름의 첫 번째 문자를 확인할 필요 없이 분할을 통해 모든 작업을 수행할 수 있습니다.
다음과 같은 최소한의 예를 생각해 보십시오.
>>> '/'.split('/')
['', '']
split
구분 기호 앞과 뒤에 있는 내용을 제공해야 합니다.'/'
하지만 다른 캐릭터는 없습니다.그래서 그것은 기술적으로 앞에 있고 뒤에 있는 빈 문자열을 해야 합니다.'/'
, 냐면왜'' + '/' + '' == '/'
.
빈 공간을 반환하지 않으려면split
알그 없이 사용합니다.
>>> " this is a sentence ".split()
['this', 'is', 'a', 'sentence']
>>> " this is a sentence ".split(" ")
['', '', 'this', '', '', 'is', '', 'a', 'sentence', '']
빈 줄을 무시하려면 분할 전에 항상 스트립 기능을 사용합니다.
당신의 출력입니다.
예:
yourstring =' \nhey\njohn\nhow\n\nare\nyou'
yourstring.strip().split('\n')
이를 위한 새로운 방법을 생각해 내려고 노력하고 있습니다.여기 모든 공백과 일부 결과를 제거하는 코드가 있습니다.해당 문자열의 처음과 끝에만 제거할 수 있는지 궁금합니다.
import string
print(list(string.whitespace))
print({ord(c): None for c in string.whitespace})
s = ' Hi Stackoverflow \n\t Mi\t\n\r\x0bhai\r\t Here '
print(s.translate({ord(c): None for c in string.whitespace}))
결과:
[' ', '\t', '\n', '\r', '\x0b', '\x0c']
{32: None, 9: None, 10: None, 13: None, 11: None, 12: None}
HiStackoverflowMihaiHere
언급URL : https://stackoverflow.com/questions/2197451/why-are-empty-strings-returned-in-split-results
'IT' 카테고리의 다른 글
그룹별 변수 합계 방법 (0) | 2023.07.07 |
---|---|
Mongodb 서비스가 시작되지 않습니다. (0) | 2023.07.07 |
(이름 없이) 지정된 번호에서 숫자만 추출하려면 어떻게 해야 합니까? (0) | 2023.07.07 |
JDBC 연결에서 TNS 이름과 서비스 이름을 사용하는 것의 차이점 (0) | 2023.07.07 |
Vuex에서 작업으로 개체 전달 문제 (0) | 2023.07.07 |