답변:
왜 map
/ lambda
매직? 이 작동하지 않습니까?
>>> foo = ['a', 'b', 'c']
>>> print(','.join(foo))
a,b,c
>>> print(','.join([]))
>>> print(','.join(['a']))
a
목록에 숫자가있는 경우 목록 이해를 사용할 수 있습니다.
>>> ','.join([str(x) for x in foo])
또는 생성기 표현식 :
>>> ','.join(str(x) for x in foo)
",".join(l)
모든 경우에 작동하지는 않습니다. StringIO와 함께 CSV 모듈을 사용하는 것이 좋습니다.
import StringIO
import csv
l = ['list','of','["""crazy"quotes"and\'',123,'other things']
line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'
StringIO
파이썬 3 에는 없습니다
from io import StringIO
파이썬 3에서의 사용
당신은 단지 원하는 것이 아닙니다 :
",".join(l)
값에서 쉼표 등을 인용 / 이스케이프 해야하는 경우 분명히 더 복잡해집니다. 이 경우 표준 라이브러리에서 csv 모듈을 살펴 보는 것이 좋습니다.
목록 이해를 사용하는 @ jmanning2k는 새로운 임시 목록을 작성하는 단점이 있습니다. 더 나은 해결책은 itertools.imap을 사용하는 것입니다.
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
다음은 list가 포함 된 예입니다.
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
더 정확한:-
>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList]))
>>> print "Output:", myList
Output: Apple,Orange
예 2 :-
myList = ['Apple','Orange']
myList = ','.join(map(str, myList))
print "Output:", myList
Output: Apple,Orange
csv
라이브러리가 문자열의 쉼표와 같은 모든 csv 사용 사례에 대처하기 위해 빌드되었으므로 여기에서 유일한 합리적인 옵션 이라고 말할 수 있습니다.
l
.csv 파일 로 목록을 출력하려면
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(l) # this will output l as a single row.
writer.writerows(iterable)
여러 행을 csv로 출력하는 데 사용할 수도 있습니다 .
이 예제는 파이썬 3과 호환됩니다 StringIO
. 파이썬 2 라는 다른 답변이 사용되었습니다 .
내 두 센트 파이썬에서 한 줄짜리 코드가 더 간단합니다.
>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'
그것은 pythonic이며 문자열, 숫자, 없음 및 빈 문자열에서 작동합니다. 짧고 요구 사항을 충족시킵니다. 목록에 숫자가 포함되지 않으면 다음과 같은 간단한 변형을 사용할 수 있습니다.
>>> ','.join(ifilter(lambda x: x, l))
또한이 솔루션은 새 목록을 만들지 않지만 @Peter Hoffmann과 같은 반복자를 사용합니다 (감사합니다).