답변:
join빈 문자열 의 메소드를 사용하여 다음 과 같이 빈 문자열과 함께 모든 문자열을 결합하십시오.
>>> a = ['a', 'b', 'c', 'd']
>>> ''.join(a)
'abcd'
' '.join(list)따옴표 사이에 공간
"".join(['a','b','c'])의미 Join all elements of the array, separated by the string ""합니다. 같은 방식 " hi ".join(["jim", "bob", "joe"])으로을 만듭니다 "jim hi bob hi joe".
이것은 JavaScript와 Ruby와 같은 많은 인기있는 언어에서 작동합니다. 왜 파이썬에서는 그렇지 않습니까?
>>> ['a', 'b', 'c'].join('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'join'
이상하게도 파이썬에서는 join메소드가 str클래스에 있습니다.
# this is the Python way
"".join(['a','b','c','d'])
JavaScript 나 다른 인기있는 스크립트 언어와 같이 객체 join의 메소드가 아닌 이유 는 무엇 list입니까? 파이썬 커뮤니티가 어떻게 생각하는지에 대한 예입니다. join은 문자열을 반환하므로 문자열은 목록 클래스가 아닌 문자열 클래스에 배치되어야합니다. 따라서 str.join(list)메서드는 다음을 의미합니다. str구분 기호로 사용하여 목록을 새 문자열로 조인합니다 (이 경우 str빈 문자열 임).
어떻게 든 나는 잠시 후이 사고 방식을 좋아해야했다. 파이썬 디자인에서 많은 것들에 대해 불평 할 수는 있지만 일관성에 대해서는 불평 할 수 없습니다.
string.join()된 join()메소드 가있는 대부분의 컬렉션과 비교 했습니다 . iterables에 관해서는 iterable을 join()메소드 의 컬렉션 생성자와 체인에 묶는 것이 쉽고 읽기 쉬우므로 그러한 언어에는 문제가되지 않습니다 .
가장 빠른 방법 일 수 있습니다.
>> from array import array
>> a = ['a','b','c','d']
>> array('B', map(ord,a)).tostring()
'abcd'
''.join(['a','b','c'])
map(ord,a)불필요한 곳에서 문자열로 변환 하지만 join needs map(chr,a). 여기 내 벤치 마크 pastebin.com/1sKFm8ma
''.join()읽을 수 있습니다.
감소 기능도 작동합니다
import operator
h=['a','b','c','d']
reduce(operator.add, h)
'abcd'
(reduce + '' h)또는 (apply + h)작동합니다. 그러나 파이썬에서 add 연산자는 정확히 2 개의 피연산자를 사용하므로 감소가 필요합니다. 그렇지 않으면, 당신은 할 수 operator.add(*h)있기 때문에, apply공식적으로 (일명 확장 호출 구문에 찬성 파이썬에서 사용되지 en.wikipedia.org/wiki/Variadic_function )
목록에 숫자가 포함 된 경우 map()와 함께 사용할 수 있습니다 join().
예 :
>>> arr = [3, 30, 34, 5, 9]
>>> ''.join(map(str, arr))
3303459
''.join([str(i) for i in arr])
h = ['a','b','c','d','e','f']
g = ''
for f in h:
g = g + f
>>> g
'abcdef'
''.join(h)하나씩 추가하는 방법보다 훨씬 빠릅니다.
str.join가장 자연스러운 방법 외에도 모든 요소를 한 번에 작성 io.StringIO하고 사용하는 것이 가능 writelines합니다.
import io
a = ['a','b','c','d']
out = io.StringIO()
out.writelines(a)
print(out.getvalue())
인쇄물:
abcd
생성기 함수 또는 a tuple또는 a 가 아닌 iterable과 함께이 접근법을 사용 하면 올바른 크기를 한 번에 할당하는 list임시 목록 작성을 저장합니다 join(1 문자 문자열 목록은 메모리 측면에서 매우 비쌉니다) ).
메모리가 부족하고 느리게 평가 된 객체를 입력으로 사용하는 경우이 방법이 가장 좋습니다.
다음 operator.concat()과 같이 사용할 수도 있습니다 .
>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'
Python 3을 사용하는 경우 앞에 추가해야합니다.
>>> from functools import reduce
내장 reduce()이 Python 3에서 제거되어 현재에 살고 있기 때문에 functools.reduce().