web-dev-qa-db-ja.com

文字列を文字の配列に分割する方法

私は、文字列を文字の配列に分割するための答えをウェブで調べようとしましたが、単純な方法が見つからないようです

str.split(//)はRubyのようには動作しないようです。ループせずにこれを行う簡単な方法はありますか?

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

list が必要です

766
user225312

あなたは文字列を取り、list()に渡します

s = "mystring"
l = list(s)
print l
65
Senthil Kumaran

List()を使わずにこの非常に簡単な方法でそれを行うこともできます。

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

文字列を一度に1文字ずつ処理したい場合。あなたは様々な選択肢があります。

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

私はこのタスクを達成するためのもう2つの方法を探りました。誰かに役立つかもしれません。

最初のものは簡単です:

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

そして2番目のものは 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', '', '']

他の方法については python docs を参照してください。

20

このタスクは、文字列の文字を繰り返し処理してそれらをリストにまとめることになります。最も単純な解決策は次のようになります。

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 のおかげで)空のリストリテラルに展開することで任意のイテラブルからリストを作成することが可能になりました。

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

これは巧妙で、場合によってはlistコンストラクタを直接呼び出すよりも効率的です。

mapnotがPython 3のリストを返さないので、私はmapベースのアプローチの使用を薦めま​​す。Python 3でのfilter、map、およびreduceの使い方を参照してください。

17
vaultah

シンプル:

s = 'My'    
print(list(s))
14
djangodude

私はあなただけの文字が必要です:

arr = list(str)

特定のstrでstrを分割したい場合は、

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

split()作り付け関数は特定の条件に基づいて値を分離するだけですが、単一のWordでは、それは条件を満たすことができません。だから、それはlist()の助けを借りて解決することができます。これは内部的に配列を呼び出し、配列に基づいて値を格納します。

と思います、

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

文字列へのアクセスのみを読み取りたい場合は、配列表記を直接使用できます。

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'

Regexpを使わずにテストするのに便利でしょう。文字列に末尾の改行が含まれていますか?

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

私がリストバージョンを気に入っているのと同じように、もう少し冗長な方法があります(ただし、かっこいいので追加したいと思いました)。

>>> 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']
2
John Lockwood
from itertools import chain

string = 'your string'
chain(string)

list(string)と似ていますが、使用時に遅延評価されるジェネレータを返すので、メモリ効率が良いです。

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

ここで、aは分離したい文字列です。値 "a [i]"はリストに追加できる文字列の個々の文字です。

0
Abass Sesay