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 통합 문자열 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.