コンマ区切りのアイテムを含む文字列をPythonのリストに変換する方法は?


140

文字列をどのようにリストに変換しますか?

文字列は次のようになりtext = "a,b,c"ます。変換後、text == ['a', 'b', 'c']うまくいけばtext[0] == 'a'text[1] == 'b'


2
こんにちは、これをそのようにしました、list(stringObject.split( '、'))
GünayGültekinDec

回答:


205

このような:

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

または、eval()文字列が安全であると信頼できる場合に使用できます。

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

@Clinteney:問題ありませんpickle
Cameron

2
これは配列ではなく、リストです。配列は基本的な値を表し、リストに格納されているオブジェクトのタイプが制限されていることを除いて、リストのように動作します。
ホアキン

8
安全な注意:文字列が安全であると信頼している場合でも、evalを使用しないでください。個人的なスクリプトとインタラクティブなシェルをいじる以上の潜在的なセキュリティ上の危険はありません。
A.ウィルソン

3
eval( '[' + text + ']')は、a、b、cを文字列ではなく変数として扱います。
ファイビン2016年

1
2つの提案されたソリューションはまったく異なることを行うため、反対票を投じました。これは、回答テキストでは決して説明されていません。質問自体は明確ではありませんが、2つの解決策は同等の選択肢ではなく、質問の解釈が異なることを回答で明らかにする必要があります。
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

次のPythonコードは、文字列を文字列のリストに変換します。

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

3
彼らはまた、使用することができjson、たとえば:json.loads(teststr)
ムハンマド・ナザリ

24

あなたする必要はないと思います

Pythonでは、文字列とリストは非常によく似ているため、文字列をリストに変換する必要はほとんどありません。

タイプを変更する

文字配列であるはずの文字列が本当にある場合は、次のようにします。

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

タイプを変更しない

文字列はPythonのリストに非常に似ていることに注意してください

文字列にはリストのようなアクセサがあります

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 2015

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

私は賛成票を投じましたが、時期尚早です。私が得アレイ( 'C'、 '1 1 91 0.001 228')を呼び出すとき=配列( 'C'、E)をここでE = "1 1 91 0.001 228"
バレンHeinitz

@ValentinHeinitzはい、これは私の例に示すように取得する必要があるものです。何を期待していますか?
joaquin

1
@joaquin:わかりました、わかりました。答えは大丈夫です。「text == [a、b、c]」は「text == ['a'、 'b'、 'c']」である必要があります
Valentin Heinitz '25

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

元の投稿者が問題を解決する方法をよりよく理解できるように、コードとともにいくつかの追加情報を提供してください。
イワン

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

私が書い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.