IT

빈 문자열이 split() 결과로 반환되는 이유는 무엇입니까?

itgroup 2023. 7. 7. 18:57
반응형

빈 문자열이 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/groupUnix 등에서는 @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

반응형