쉼표로 구분 된 항목이있는 문자열을 Python의 목록으로 변환하는 방법은 무엇입니까?


140

문자열을 목록으로 어떻게 변환합니까?

문자열이 같다고 가정 해보십시오 text = "a,b,c". 전환 후, text == ['a', 'b', 'c']그리고 희망적으로 text[0] == 'a', text[1] == 'b'?


2
안녕하세요, 그렇게했습니다, list (stringObject.split ( ','))
Günay Gültekin

답변:


205

이처럼 :

>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]

또는 eval()문자열을 안전하다고 신뢰하는 경우 사용할 수 있습니다.

>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')

@Clinteney : 문제 없음 ;-) pickle객체를 문자열로 유지하는지 살펴볼 수도 있습니다 .
Cameron

2
이것은 배열이 아니라 목록이며, 배열은 기본 값을 나타내며 저장된 객체 유형이 제한되는 것을 제외하고는 목록과 매우 유사하게 작동합니다.
joaquin

8
친절한 알림 : 문자열이 안전하다고 믿더라도 eval을 사용하지 마십시오. 대화 형 셸에서 개인 스크립트와 허풍보다 더 중요한 보안 위험은 없습니다.
A. Wilson

3
eval ( '['+ text + ']')은 a, b, c를 문자열이 아닌 변수로 취급합니다.
phaibin

1
제안 된 두 가지 솔루션이 완전히 다른 것을 수행하기 때문에 하향 조정되었으며 답변 텍스트에는 설명되어 있지 않습니다. 질문 자체가 실제로 명확하지는 않지만 두 솔루션이 동등한 대안이 아니라 질문에 대한 해석이 다르다는 점에서 답을 분명히해야합니다.
Matteo Italia

179

기존 답변에 추가하기 만하면 다음과 같이 더 많은 것을 보게 될 것입니다.

>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'

하지만 지금 당장 다루고있는 것은 @ Cameron 의 답변으로 이동하십시오.

>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'

4
@Cameron의 답변이 "지금 당장"이라는 답변에 동의하지만 귀하의 철저 함이 더 정확한 답변이라고 생각합니다. 실제로는 쉼표로 구분 된 문자열이 거의 없으며 형식에 관계없이 목록으로 변환하는 방법을 아는 것이 좋습니다.
TristanZimmerman

39

다음 파이썬 코드는 문자열을 문자열 목록으로 바꿉니다.

import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)

3
json예를 들어 다음과 같이 사용할 수도 있습니다 .json.loads(teststr)
Mohammad Nazari

24

난 당신이 생각하지 않는다 필요

파이썬에서는 문자열과 목록이 매우 유사하기 때문에 문자열을 목록으로 변환 할 필요가 거의 없습니다.

타입 변경

실제로 문자 배열이어야하는 문자열이있는 경우 다음을 수행하십시오.

In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']

유형을 변경하지 않음

문자열은 파이썬의 목록과 매우 유사합니다.

문자열에는 목록과 같은 접근자가 있습니다.

In [3]: x[0]
Out[3]: 'f'

문자열은 목록처럼 반복 가능합니다

In [4]: for i in range(len(x)):
...:     print x[i]
...:     
f
o
o
b
a
r

TLDR

문자열은 목록입니다. 거의.


8

공백으로 나누려면 다음을 사용할 수 있습니다 .split().

a = 'mary had a little lamb'
z = a.split()
print z

산출:

['mary', 'had', 'a', 'little', 'lamb'] 

이것은 사이에있는 것을 출력 ()합니다.
Anthon

7

실제로 배열을 원한다면 :

>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'

배열이 필요하지 않고 문자를 색인으로만보고 싶다면 문자열이 불변이라는 사실을 제외하고 목록과 마찬가지로 반복 가능하다는 것을 기억하십시오.

>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'

1
호기심에서 myarray = array ( 'c', text)를 한 후에 "c"는 어디로 갔습니까? array를 입력하면 array ( "c", "abc")가 있지만 a [0] == a? 감사합니다
Clinteney Hui

@Clinteney : 'c'는 "문자 배열 만들기"를 의미합니다. 자세한 내용 은 문서 를 참조하십시오
Cameron

나는 upvoted했지만 너무 일찍. I 입수 어레이 ( 'C', '1 1 91 0.001 228') 를 호출 할 때 A = 배열 ( 'C', E) 여기서, E = "1 91 0.001 228"
발렌틴 Heinitz

@ValentinHeinitz 예, 이것이 나의 예와 같이 얻어야 할 것입니다. 당신은 무엇을 기대합니까?
joaquin

1
@ joaquin : 알았어. 정답입니다. 질문 "text == [a, b, c]"는 "text == [ 'a', 'b', 'c']"
이어야합니다.

4
m = '[[1,2,3],[4,5,6],[7,8,9]]'

m= eval(m.split()[0])

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

원본 포스터가 문제를 해결하는 방법을 더 잘 이해할 수 있도록 코드와 함께 추가 정보를 제공하십시오.
Ivan

4

모든 답변은 훌륭합니다. 목록 이해력이있는 또 다른 방법이 있습니다. 아래 솔루션을 참조하십시오.

u = "UUUDDD"

lst = [x for x in u]

쉼표로 구분 된 목록의 경우 다음을 수행하십시오.

u = "U,U,U,D,D,D"

lst = [x for x in u.split(',')]

나는 루프에 대한 한 줄을 이해하지 못하고 결코하지 않습니다
Mr PizzaGuy

1
@MrPizzaGuy 당신이 그것을 사용할 때 쉽고 매우 편리합니다,이 youtube.com/watch?v=AhSvKGTh28Q
waghydjemy

1

나는 보통 다음을 사용합니다.

l = [ word.strip() for word in text.split(',') ]

strip단어 주위 제거 공간.


1

내가 아직 최적화되지 않은 코드를 작성한 string형식으로 변환하려면 다음 을 수행하십시오 a="[[1, 3], [2, -6]]".

matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
    row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
    matrixAr.append(row)
print matrixAr

0
# to strip `,` and `.` from a string ->

>>> 'a,b,c.'.translate(None, ',.')
'abc'

translate문자열 에는 내장 방법을 사용해야합니다 .

help('abc'.translate)자세한 정보는 Python 쉘에 입력 하십시오.



0

실시 예 1

>>> email= "myemailid@gmail.com"
>>> email.split()
#OUTPUT
["myemailid@gmail.com"]

실시 예 2

>>> email= "myemailid@gmail.com, someonsemailid@gmail.com"
>>> email.split(',')
#OUTPUT
["myemailid@gmail.com", "someonsemailid@gmail.com"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.