문자열 목록에서 쉼표로 구분 된 문자열을 어떻게 만드시겠습니까?
연속 된 두 쌍 사이에 쉼표가 추가되도록 시퀀스에서 문자열을 연결하는 선호하는 방법은 무엇입니까? 즉, 어떻게하면, 예를 들어,지도 않습니다 [ 'a', 'b', 'c' ]
에 'a,b,c'
? (사례 [ s ]
와는 []
매핑되어야 s
하고 ''
, 각각).
나는 보통와 같은 것을 사용 ''.join(map(lambda x: x+',',l))[:-1]
하지만 다소 불만족스러워합니다.
편집 : 솔루션이 너무 간단하다는 것이 부끄럽고 행복합니다. 분명히 나는 내가하고있는 일에 대한 단서가 거의 없다. (아마도 과거에는 "간단한"연결이 필요했고 어쨌든 간결한 이름으로 암기 s.join([e1,e2,...])
되었습니다 s+e1+e2+...
.
myList = ['a','b','c','d']
myString = ",".join(myList )
목록에 숫자가 포함되어 있으면 작동하지 않습니다.
Ricardo Reyes가 제안한 것처럼 문자열이 아닌 유형 (예 : 정수, 부동 소수점, 부울, 없음)을 포함하면 다음을 수행하십시오.
myString = ','.join(map(str, myList))
왜 맵 / 람다 매직? 이 작동하지 않습니까?
>>>foo = [ 'a', 'b', 'c' ]
>>>print ",".join(foo)
a,b,c
>>>print ",".join([])
>>>print ",".join(['a'])
a
편집 : @ mark-biek는 숫자의 경우를 지적합니다. 아마도 목록 이해력 :
>>>','.join([str(x) for x in foo])
더 "pythonic"입니다.
Edit2 : 제안 해 주셔서 감사합니다. 앞으로는 목록 이해가 아닌 생성기를 사용할 것입니다.
>>>','.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')"
참고 : 쉼표 뒤의 공백은 의도적 인 것입니다.
@ 피터 호프만
생성자 표현식을 사용하면 반복자를 생성하는 이점이 있지만 itertools 가져 오기를 절약 할 수 있습니다. 또한 목록 이해는 일반적으로 매핑하는 것이 바람직하므로 생성기 표현식이 imap보다 선호됩니다.
>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar'
당신은 단지 원하는 것이 아닙니다 :
",".join(l)
값에서 쉼표 등을 인용 / 이스케이프 해야하는 경우 분명히 더 복잡해집니다. 이 경우 표준 라이브러리에서 csv 모듈을 살펴 보는 것이 좋습니다.
https://docs.python.org/library/csv.html
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'
my_list
모든 유형의 변수를 포함 할 수 있습니다. 결과를 피하십시오 'A,,,D,E'
.
목록 이해를 사용하는 @ jmanning2k는 새로운 임시 목록을 작성하는 단점이 있습니다. 더 나은 해결책은 itertools.imap을 사용하는 것입니다.
from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))
숫자가 포함 된 목록을 변환하려면 다음을 수행하십시오.
string = ''.join([str(i) for i in list])
l=['a', 1, 'b', 2]
print str(l)[1:-1]
Output: "'a', 1, 'b', 2"
내가 빠진 것이 아니라면, ','.join(foo)
당신이 원하는 것을해야합니다.
>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'
(편집 : jmanning2k가 지적한 것처럼,
','.join([str(x) for x in foo])
요소가 쉼표를 포함 할 수있는 경우 결과 문자열을 구문 분석하기 어려울 수 있지만 더 안전하고 매우 Pythonic입니다. 그 시점에서 csv
Douglas가 그의 답변에서 지적한 것처럼 모듈 의 모든 기능이 필요합니다 .)
다음은 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 라는 다른 답변이 사용되었습니다 .
이 같은 작은 것 :)
String = "Once:Upon:a:Time:A:Long:Time:Ago"
ding = String.split(':')
ring = (" , ").join(ding)
print(ring)
출력 : 한 번,에, a, 시간, A, 긴, 시간, 이전
내 두 센트 파이썬에서 한 줄짜리 코드가 더 간단합니다.
>>> 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과 같은 반복자를 사용합니다 (감사합니다).
'Programming' 카테고리의 다른 글
Jasmine에서 오류가 발생할 것으로 예상되는 테스트를 작성하는 방법은 무엇입니까? (0) | 2020.02.16 |
---|---|
라디오 버튼을 선택 해제하는 방법? (0) | 2020.02.16 |
목록의 항목을 문자열로 연결 (0) | 2020.02.16 |
HashMap에서 삽입 순서를 유지하는 방법은 무엇입니까? (0) | 2020.02.16 |
프로그래밍 방식으로 WPF 응용 프로그램을 종료하려면 어떻게합니까? (0) | 2020.02.16 |