programing

문자열 목록에서 쉼표로 구분된 문자열을 만들려면 어떻게 해야 합니까?

projobs 2022. 10. 2. 15:08
반응형

문자열 목록에서 쉼표로 구분된 문자열을 만들려면 어떻게 해야 합니까?

연속되는 두 쌍의 쌍 사이에 쉼표가 추가되도록 시퀀스에서 문자열을 연결하는 방법은 무엇입니까?즉, 예를 들어 어떻게 맵을 작성하면['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)모든 경우에 효과가 있는 것은 아닙니다.문자열과 함께 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'

@피터 호프만

생성기 식을 사용하면 반복기를 생성할 수 있지만 반복 도구 가져오기를 절약할 수 있습니다.또한 일반적으로 매핑보다는 리스트 컴플리션을 선호하기 때문에 imap보다는 생성기 식을 선호할 것으로 예상됩니다.

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

다음은 문자열이 아닌 목록 항목을 허용하는 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

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

my_list에는 모든 유형의 변수를 포함할 수 있습니다.이렇게 하면 결과를 피할 수 있습니다.'A,,,D,E'.

l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"

목록 이해를 사용하는 @jmanning2k에는 새로운 임시 목록이 작성되는 단점이 있습니다.더 나은 솔루션은 반복기를 반환하는 itertools.imap을 사용하는 것입니다.

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))

리스트의 예를 다음에 나타냅니다.

>>> 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

숏컷 방법을 사용하는 경우:)

','.join([str(word) for word in wordList])

그러나 논리로 과시하고 싶은 경우:)

wordList = ['USD', 'EUR', 'JPY', 'NZD', 'CHF', 'CAD']
stringText = ''

for word in wordList:
    stringText += word + ','

stringText = stringText[:-2]   # get rid of last comma
print(stringText)

내가 뭘 놓치고 있는 게 아니라면','.join(foo)당신이 원하는 걸 해야 해요

>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'

(편집: jmanning2000이 지적한 바와 같이

','.join([str(x) for x in foo])

결과 문자열이 콤마를 포함할 수 있는 경우 해석하기가 어렵지만, 더 안전하고 꽤 피토닉합니다--그 시점에서, 당신은 완전한 힘을 필요로 합니다.csv모듈(더글러스 답변에서 지적한 바와 같이)

는 '아까운'이라고 이다.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과 이 있습니다. 3을 사용하고 있습니다.StringIO파이썬 2번

mmm SQL의 필요성은 다음과 같습니다.

l = ["foo" , "baar" , 6]
where_clause = "..... IN ("+(','.join([ f"'{x}'" for x in l]))+")"
>> "..... IN ('foo','baar','6')"

금지하다

내 의견이야.python으로 된 간단한 한 줄 코드를 좋아합니다.

>>> 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'

비단뱀처럼 문자열, 숫자, 없음 및 빈 문자열에 대해 작동합니다.짧고 요건을 충족합니다.리스트에 숫자가 포함되지 않는 경우는, 다음의 간단한 변형을 사용할 수 있습니다.

>>> ','.join(ifilter(lambda x: x, l))

또, 이 솔루션은 새로운 리스트를 작성하는 것이 아니고, @Peter Hoffmann이 지적한(고맙습니다) 것과 같은 반복기를 사용합니다.

언급URL : https://stackoverflow.com/questions/44778/how-would-you-make-a-comma-separated-string-from-a-list-of-strings

반응형