Python 문자열 병합 방법

문제.
작은 문자열 몇 개 를 큰 문자열 로 합 치 려 고 합 니 다.
해결 방안
병합 하고 싶 은 문자열 이 하나의 시퀀스 나 iterable 에 있다 면 가장 빠 른 방법 은 join()방법 을 사용 하 는 것 입 니 다.예 를 들 면:

>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
>>> ','.join(parts)
'Is,Chicago,Not,Chicago?'
>>> ''.join(parts)
'IsChicagoNotChicago?'
>>>
처음에는 이상 하 게 보이 지만 join()은 문자열 로 지정 되 어 있 습 니 다.이렇게 하 는 부분 은 연결 하고 싶 은 대상 이 다양한 데이터 시퀀스(예 를 들 어 목록,원본,사전,파일,집합 또는 생 성기 등)에서 나 올 수 있 기 때 문 입 니 다.이 모든 대상 에서 join()방법 을 정의 하면 분명 지루 합 니 다.따라서 원 하 는 분할 문자열 을 지정 하고 join()방법 으로 텍스트 세 션 을 조합 해 야 합 니 다.
만약 당신 이 단지 몇 개의 문자열 을 합 친 것 이 라면,플러스(+)를 사용 하 는 것 만으로 도 충분 합 니 다.

>>> a = 'Is Chicago'
>>> b = 'Not Chicago?'
>>> a + ' ' + b
'Is Chicago Not Chicago?'
>>>
더하기(+)연산 자 는 복잡 한 문자열 포맷 의 대체 방안 으로 도 잘 작 동 합 니 다.예 를 들 어:

>>> print('{} {}'.format(a,b))
Is Chicago Not Chicago?
>>> print(a + ' ' + b)
Is Chicago Not Chicago?
>>>
원본 코드 에서 두 글자 의 문자열 을 합 치 려 면 간단하게 그것들 을 함께 놓 아야 합 니 다.플러스(+)를 사용 할 필요 가 없습니다.예 를 들 면:

>>> a = 'Hello' 'World'
>>> a
'HelloWorld'
>>>
토론 하 다.
문자열 통합 은 한 절 로 토론 할 필요 가 없 을 것 같 습 니 다.그러나 이 문 제 를 얕 잡 아 봐 서 는 안 된다.프로그래머 는 문자열 을 포맷 할 때 선택 이 부적 절하 여 프로그램 에 심각 한 성능 손실 을 가 져 온다.
가장 중요 한 것 은 우리 가 플러스(+)연산 자 를 사용 하여 대량의 문자열 을 연결 할 때 매우 비효 율 적 이라는 것 이다.플러스 연결 은 메모리 복사 와 쓰레기 회수 작업 을 일 으 킬 수 있 기 때문이다.특히,아래 와 같이 문자열 연결 코드 를 쓰 면 안 됩 니 다.

s = ''
for p in parts:
  s += p
이 쓰 기 는 join()방법 을 사용 하 는 것 보다 느 릴 것 입 니 다.+=작업 을 수행 할 때마다 새로운 문자열 대상 을 만 들 기 때 문 입 니 다.모든 문자열 세 션 을 수집 한 다음 연결 하 는 것 이 좋 습 니 다.
비교적 똑똑 한 기 교 는 생 성기 표현 식(1.19 소절 참조)을 이용 하여 데 이 터 를 문자열 로 변환 하 는 동시에 문자열 을 합 치 는 것 이다.예 를 들 어:

>>> data = ['ACME', 50, 91.1]
>>> ','.join(str(d) for d in data)
'ACME,50,91.1'
>>>
불필요 한 문자열 연결 작업 도 주의해 야 한다.프로그래머 가 연결 작업 을 할 필요 가 없 을 때 도 쓸데없는 짓 을 하기 도 한다.예 를 들 어 인쇄 할 때:

print(a + ':' + b + ':' + c) # Ugly
print(':'.join([a, b, c])) # Still ugly
print(a, b, c, sep=':') # Better
I/O 작업 과 문자열 연결 작업 을 혼합 할 때 프로그램 을 자세히 연구 해 야 할 때 가 있 습 니 다.예 를 들 어 아래 의 양 끝 코드 세 션 을 고려 합 니 다.

# Version 1 (string concatenation)
f.write(chunk1 + chunk2)

# Version 2 (separate I/O operations)
f.write(chunk1)
f.write(chunk2)
만약 두 문자열 이 매우 작다 면,첫 번 째 버 전의 성능 은 더욱 좋 을 것 이다.왜냐하면 I/O 시스템 호출 은 천성적으로 느 리 기 때문이다.다른 한편,두 문자열 이 크 면 두 번 째 버 전 은 더 효율 적일 수 있 습 니 다.큰 임시 결 과 를 만 들 지 않 고 대량의 메모리 블록 데 이 터 를 복사 해 야 하기 때 문 입 니 다.아니면 그 말 인지,때로는 응용 프로그램의 특징 에 따라 어떤 방안 을 사용 해 야 할 지 결정 해 야 할 때 가 있다.
마지막 으로 작은 문자열 을 만 드 는 출력 코드 를 만 들 려 면 생 성기 함 수 를 사용 하여 yield 문 구 를 이용 하여 출력 세 션 을 만 드 는 것 을 고려 하 는 것 이 좋 습 니 다.예 를 들 면:

def sample():
  yield 'Is'
  yield 'Chicago'
  yield 'Not'
  yield 'Chicago?'
이런 방법의 흥미 로 운 점 은 출력 부분 이 도대체 어떻게 조직 되 어야 하 는 지 에 대해 가설 을 하지 않 았 다 는 것 이다.예 를 들 어 join()방법 으로 이 세 션 을 간단하게 합 칠 수 있 습 니 다.

text = ''.join(sample())
또는 문자열 세 션 을 I/O 로 바 꿀 수도 있 습 니 다.

for part in sample():
  f.write(part)
또는 I/O 작업 을 결합 한 혼합 방안 도 쓸 수 있 습 니 다.

def combine(source, maxsize):
  parts = []
  size = 0
  for part in source:
    parts.append(part)
    size += len(part)
    if size > maxsize:
      yield ''.join(parts)
      parts = []
      size = 0
    yield ''.join(parts)

#       
with open('filename', 'w') as f:
  for part in combine(sample(), 32768):
    f.write(part)
여기 서 관건 은 원시 생 성기 함수 가 사용 세부 사항 을 알 필요 가 없다 는 것 이다.문자열 세 션 만 생 성하 면 된다.
이상 은 Python 이 문자열 을 통합 하 는 방법 에 대한 상세 한 내용 입 니 다.Python 통합 문자열 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기