python join 함수는 문자열 연결을 할 때 유용하게 쓰일 수 있는 함수입니다. 문자열 뒤에 여러 string을 append 할 때 자주 쓰입니다.
먼저 사용법을 보도록 하겠습니다.
인자가 2개 있습니다.
- self
- __iterable
- 순회 가능한 (iterable 한 객체)를 의미합니다. python은 list가 대표적입니다.
보통, “iterable한 객체 안에 주어진 문자열 사이에 추가할 구분자“.join(리스트와 같은 iterable한 객체) 형식으로 쓰입니다. 설명을 읽어보면, self 역할을 하는 것은, 주어진 string들 사이로 insert 된다고 되어 있어요. 이게 무슨 이야기인지 2개의 예제 프로그램을 보도록 하겠습니다.
먼저, 예제 1번입니다. list에 string이 여러 개 있습니다. “I”, “am”, “a”, “dog”가 있어요. 2번째 줄에는 “”.join(li)라고 되어 있습니다. 그런데, self로 주어진 문자열이 빈 문자열입니다. 이 경우, 아래와 같이 동작합니다.
- iterable한 list 객체 li를 돌면서 문자열을 concat 시키는데
- self가 빈 문자열이므로, 문자열 사이에 빈 문자열을 넣습니다.
이를 그림으로 도식화 시키면 아래와 같습니다.
iterable로 넘긴 리스트 li가 있습니다. 이 li를 돌면서 문자열들을 concat 시킵니다. 그런데 self가 “”, 빈 문자열이므로 I와 am, am과 a, a와 dog 사이에 빈 문자열을 넣는다는 의미입니다.
그러면 요렇게 그려지겠지요? 최종적으로, Iamadog가 출력되게 됩니다.
출력 결과를 보면 Iamadog가 나왔음을 볼 수 있습니다.
예제 2번 프로그램은 “,”.join(li)입니다. 이는, concat 하는 문자열들 사이에 “,”를 넣어줍니다.
즉, I와 am, am과 a, a와 dog 사이에 “,”를 끼워 넣습니다.
따라서, 결과는 “I,am,a,dog”가 나옵니다. 여기서 질문 하나. 만약에 “I.am.a.dog”를 출력하고 싶다면 어떻게 하면 될까요? self에 “.”를 넣으면 됩니다. 즉, “.”.join(li)를 입력하면 됩니다.
python join 함수의 시간 복잡도는 어떻게 될까요? 주어진 문자열과 구분자를 list 안에 append 시키면 됩니다. 따라서, 결과 문자열의 총 길이라고 할 수 있습니다.
결과 문자열의 총 길이는 군청색 부분과 노란색 부분의 길이 합이라고 할 수 있습니다.
- 군청색 부분
- iterable한 객체에 들어있는 문자열 길이의 총 합입니다.
- 노란색 부분
- self. 즉 iterable 안에 주어진 string 사이에 넣을 문자열 길이 c에
- iterable 안에 들어 있는 문자열 개수 len(iterable)의 곱입니다.