[python] 문자열 목록에서 쉼표로 구분 된 문자열을 어떻게 만드시겠습니까?

연속 된 두 쌍 사이에 쉼표가 추가되도록 시퀀스에서 문자열을 연결하는 선호하는 방법은 무엇입니까? 즉, 어떻게하면, 예를 들어,지도 않습니다 ['a', 'b', 'c']'a,b,c'? (사례 ['s']와는 []매핑되어야 's'하고 '', 각각).

나는 보통와 같은 것을 사용 ''.join(map(lambda x: x+',',l))[:-1]하지만 다소 불만족스러워합니다.



답변

my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
'a,b,c,d'

목록에 정수가 포함되어 있으면 작동하지 않습니다.


목록에 문자열이 아닌 유형 (예 : 정수, 부동 수, 부울, 없음)이 포함 된 경우 다음을 수행하십시오.

my_string = ','.join(map(str, my_list)) 


답변

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'


답변

문자열이 아닌 목록 항목을 허용하는 Python 3.0의 대체 솔루션은 다음과 같습니다.

>>> alist = ['a', 1, (2, 'b')]
  • 표준적인 방법

    >>> ", ".join(map(str, alist))
    "a, 1, (2, 'b')"
    
  • 대체 솔루션

    >>> import io
    >>> s = io.StringIO()
    >>> print(*alist, file=s, sep=', ', end='')
    >>> s.getvalue()
    "a, 1, (2, 'b')"
    

참고 : 쉼표 뒤에 공백이 있습니다.


답변

당신은 단지 원하는 것이 아닙니다 :

",".join(l)

값에서 쉼표 등을 인용 / 이스케이프 해야하는 경우 분명히 더 복잡해집니다. 이 경우 표준 라이브러리에서 csv 모듈을 살펴 보는 것이 좋습니다.

https://docs.python.org/library/csv.html


답변

@ 피터 호프만

생성자 표현식을 사용하면 반복자를 생성하는 이점이 있지만 itertools 가져 오기를 절약 할 수 있습니다. 또한 목록 이해는 일반적으로 매핑하는 것이 바람직하므로 생성기 표현식이 imap보다 선호됩니다.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar' 


답변

>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'

my_list모든 유형의 변수를 포함 할 수 있습니다. 결과를 피하십시오 'A,,,D,E'.