.join () 메소드는 정확히 무엇을합니까?


209

나는 파이썬을 처음 접했고 .join()문자열을 연결하는 데 선호되는 방법이라는 것을 완전히 혼동했습니다 .

나는 시도했다 :

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

다음과 같은 것을 얻었습니다.

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

왜 이렇게 작동합니까? 안 595만 자동으로 추가 할 수?


1
프로그램이 실행되는 동안 Yubikey를 탭했다고 생각합니다.
Trenton

답변:


303

출력을주의 깊게 살펴보십시오.

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

원래 문자열의 "5", "9", "5"를 강조 표시했습니다. Python join()메소드는 문자열 메소드이며 문자열과 결합 할 항목 목록 을 가져옵니다 . 더 간단한 예는 다음을 설명하는 데 도움이 될 수 있습니다.

>>> ",".join(["a", "b", "c"])
'a,b,c'

주어진 목록의 각 요소 사이에 ","가 삽입됩니다. 귀하의 경우, "목록"은 문자열 표현 "595"이며, 이는 목록 [ "5", "9", "5"]으로 취급됩니다.

+대신 찾고있는 것으로 보입니다 .

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

1
왜 그렇지 않습니다 : 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? 마지막 요소에 문자열이 추가 되었습니까?
Matt McCormick

10
그 이유 중 하나 joinsplit( docs.python.org/library/stdtypes.html#str.split ) 의 유용한 속성을 제공 하기 때문입니다.
cobbal

4
다른 구분 기호를 원하면 목록 끝에 빈 문자열을 넣으십시오. ','.join(['a', 'b', 'c', ''])님에게 "a, b, c"제공
tgray

9
OP는 아마 실제로 경로를 연결하는 string.join것과 혼동이 있었을 것입니다os.path.join
Juan Campa

91

join반복 가능한 것을 인수로 취합니다. 일반적으로 목록입니다. 귀하의 경우 문제는 문자열 자체가 반복 가능하여 각 문자를 차례로 제공한다는 것입니다. 코드는 다음과 같이 분류됩니다.

"wlfgALGbXOahekxSs".join("595")

이것은 다음과 동일하게 작동합니다.

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

따라서 문자열을 생성합니다.

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

반복 가능한 문자열은 파이썬에서 가장 혼란스러운 시작 문제 중 하나입니다.


8
혼란의 요점을 지적하는 것에 대한 공감 : 문자열은 반복 가능하므로 문자 목록처럼 작동합니다.
Daniel Baird

59

문자열을 추가하려면 +기호로 연결 하십시오.

예 :

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

join문자열을 구분 기호와 함께 연결합니다. 구분 기호는 바로 앞에 배치 join됩니다. 예 :

>>> "-".join([a,b])
'Hello, -world'

Join은 문자열 목록을 매개 변수로 사용합니다.


5
이러한 종류의 직접적이고 간결한 답변은 커뮤니티에서 옹호해야합니다. @
Dan

7

join ()은 모든 목록 요소를 연결하기위한 것입니다. 두 개의 문자열 "+"만 연결하면 더 의미가 있습니다.

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid

4

다른 사람들의 말을 조금 더 확장하려면 join을 사용하여 단순히 두 문자열을 연결하려면 다음과 같이하십시오.

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

여기 +에 많은 수의 문자열을 연결하는 데 비용이 많이 드는 이유에 대한 좋은 설명이 있습니다.

플러스 연산자는 두 개의 파이썬 문자열 을 연결하는 완벽한 솔루션 입니다. 그러나 두 개 이상의 문자열을 계속 추가하면 (n> 25) 다른 것을 생각할 수도 있습니다.

''.join([a, b, c]) 트릭은 성능 최적화입니다.


0

이를 입력으로 제공하면

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

파이썬은 이것을 출력으로 반환합니다 :

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

이것이 입력 인 경우 JOIN 메소드를 사용하여 단어 사이의 거리를 추가하고 목록을 문자열로 변환 할 수도 있습니다.

이것은 파이썬 출력입니다

'my name is kourosh'

0

"".join을 사용하여 목록의 문자열을 변수에 복사 할 수 있습니다.

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.