문자열을 문자 배열로 나누는 방법은 무엇입니까?


451

문자열을 문자 배열로 나누는 것에 대한 답변을 웹에서 살펴 보았지만 간단한 방법을 찾을 수없는 것 같습니다.

str.split(//)루비처럼 작동하지 않는 것 같습니다. 루핑 없이이 작업을 수행하는 간단한 방법이 있습니까?


12
파이썬에서 문자열은 대체를 제외한 모든 목적을 위해 이미 문자 배열입니다. 당신은 그것들을 슬라이스하거나, 인덱스로 아이템을 참조하거나 찾을 수 있습니다.
dansalmo

답변:


861
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

당신은 목록 이 필요 합니다


2
내 생각에 루비 방법보다 훨씬 낫다 .C 레벨에서 시퀀스 유형 사이를 자유롭게, 더 좋게 변환 할 수 있습니다.
arthurprs

리스트 생성자는 문자열을 문자형 배열로 자동 변환하는 고급 기능입니다. String은 균질 한 유니 코드 문자 시퀀스이므로 Python으로 작업하기에는 너무 멋지므로 Guido는 Guido가 더 우수하게 만들었습니다. 훌륭한 기능에 대한 사랑의 파이썬.
Doogle

나는 이것을하지 않기 위해 여기에 플래그를 원하지만 ... 어쨌든 호출 가능을 원한다면 다음을 사용 하여이 동작을 벗어날 수 있습니다.cast_method = lambda x: [x]
madzohan

73

문자열을 가져 와서 list ()에 전달하십시오.

s = "mystring"
l = list(s)
print l

61

list () 없이이 간단한 방법으로 수행 할 수도 있습니다.

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']

4
stackoverflow에 오신 것을 환영합니다. 문제를 해결하는 방법을 설명하기 위해 답변을 조금 확장 해 주시겠습니까?
NJInamdar

21
이것은 단순한 for것이며 설명 할 것이 많지 않습니다. 데이터 구조 , 특히 목록 이해 에 대한 파이썬 튜토리얼을 읽어야한다고 생각합니다 .
WhyNotHugo

4
이것은 단지 의미 list(map(lambda c: c, iter("foobar")))가 있지만 더 읽기 쉽고 의미가 있습니다.
no1xsyzy 2018

42

한 번에 한 문자 씩 문자열을 처리하려는 경우. 다양한 옵션이 있습니다.

uhello = u'Hello\u0020World'

목록 이해 사용하기 :

print([x for x in uhello])

산출:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

지도 사용하기 :

print(list(map(lambda c2: c2, uhello)))

산출:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

내장 목록 기능 호출 :

print(list(uhello))

산출:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

for 루프 사용하기 :

for c in uhello:
    print(c)

산출:

H
e
l
l
o

W
o
r
l
d

이러한 각 방법의 성능 특성에 차이가 있습니까?
qxzsilver

20

이 작업을 수행하는 또 다른 두 가지 방법을 탐색했습니다. 누군가에게 도움이 될 수 있습니다.

첫 번째는 쉽다 :

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

두 번째는 사용 maplambda기능입니다. 보다 복잡한 작업에 적합 할 수 있습니다.

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

예를 들어

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

더 많은 방법 은 파이썬 문서 를 참조하십시오


첫 번째 방법은 매우 간단합니다. 사람들이 더 복잡한 것을 원하는 이유가 있습니까?
undrline

여보세요! 첫 번째 옵션은 실제로 간단합니다. 그러나 두 번째 프로세스는 더 복잡한 처리를 처리 할 가능성이 더 높습니다.
Alexey Milogradov 2016 년

19

이 작업은 문자열의 문자를 반복하여 목록으로 수집하는 것으로 요약됩니다. 가장 순진한 솔루션은 다음과 같습니다.

result = []
for character in string:
    result.append(character)

물론, 그것은 단지 단축 될 수 있습니다

result = [character for character in string]

그러나 여전히 똑같은 일을하는 더 짧은 솔루션이 있습니다.

list생성자는 iterable (반복자, 목록, 튜플, 문자열 등)을 목록 으로 변환하는 데 사용할 수 있습니다 .

>>> list('abc')
['a', 'b', 'c']

가장 큰 장점은 Python 2와 Python 3에서 모두 동일하게 작동한다는 것입니다.

또한 Python 3.5부터 (굉장한 PEP 448 덕분에 ) 빈 목록 리터럴로 압축을 풀면 모든 iterable에서 목록을 작성할 수 있습니다.

>>> [*'abc']
['a', 'b', 'c']

이것은 더 깔끔하며 어떤 경우에는 전화하는 것보다 더 효율적입니다 list 생성자를 직접 입니다.

Python 3에서는 목록을 반환 하지 않기map 때문에 기반 접근 방식 을 사용 map하지 않는 것이 좋습니다 . Python 3에서 필터, 맵 및 축소 사용 방법을 참조하십시오 .


나는 마지막 제안이 매우 좋다고 생각합니다. 그러나 나는 왜 당신이 다른 접근법 중 일부를 다시 방문했는지 알지 못합니다 (대부분의 방법)는 이미 여기에 게시되어 있으며 놀라운 python 3.5 솔루션 에서 산만 합니다!
MSeifert

14

나는 당신에게 문자 배열이 필요합니다 :

arr = list(str)

str을 특정 str로 나누려면 다음을 수행하십시오.

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")

12

split()내장 함수는 특정 조건을 기준으로 값을 분리하지만 한 단어에서는 조건을 충족시킬 수 없습니다. 그래서, 그것은의 도움으로 해결할 수 있습니다list() . 내부적으로 Array를 호출하고 배열을 기준으로 값을 저장합니다.

가정 해 봅시다.

a = "bottle"
a.split() // will only return the word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']


3

문자열에 대한 액세스 권한 만 읽으려면 배열 표기법을 직접 사용할 수 있습니다.

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'

정규 표현식을 사용하지 않고 테스트하는 데 유용 할 수 있습니다. 문자열에 줄 바꿈이 포함되어 있습니까?

>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True

1

글쎄, 내가리스트 버전을 좋아하는 것처럼, 여기에 내가 찾은 또 다른 더 장황한 방법이있다. (하지만 멋지다.

>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']

camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
whereisalext

1
from itertools import chain

string = 'your string'
chain(string)

유사 list(string)메모리 효율적인 그래서, 게으르게 사용의 시점에서 평가 발전기하지만 돌아갑니다.


이것이 문자열 자체보다 더 유용한 곳인지 확실하지 않습니다.
Ry-

0
>>> for i in range(len(a)):
...     print a[i]
... 

여기서 a는 분리하려는 문자열입니다. "a [i]"값은 문자열을 목록에 추가 할 수있는 문자열의 개별 문자입니다.


1
for c in a: print c더 직접적입니다
James Waldby-jwpat7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.