답변:
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()
.