如何在Python中将带有逗号分隔的项目的字符串转换为列表?


140

如何将字符串转换为列表?

说的字符串就像text = "a,b,c"。转换后,text == ['a', 'b', 'c']希望是text[0] == 'a'text[1] == 'b'


2
嗨,我是这样做的,list(stringObject.split(','))
GünayGültekin17年

Answers:


205

像这样:

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

另外,eval()如果您信任字符串是安全的,则可以使用:

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

@Clinteney:没问题;-)您可能还想研究pickle是否将对象持久化为字符串。
卡梅伦

2
这不是一个数组,而是一个列表,数组表示基本值,并且行为非常类似于列表,只不过存储在其中的对象类型受到限制。
华金

8
温馨提示:即使您相信字符串是安全的,也不要使用eval。除了个人脚本和在交互式外壳中摆弄东西之外,这对于潜在的安全隐患是不值得的。
A. Wilson

3
eval('['+ text +']')会将a,b,c视为变量,而不是字符串。
磷脂

1
被否决的原因是,这两个提议的解决方案做了完全不同的事情,并且答案文本中没有任何解释。虽然问题本身并不清楚,但应在答案中明确指出这两种解决方案不是等效的替代方案,而是对问题的不同解释。
Matteo Italia

179

只是补充现有的答案:希望将来您会遇到更多类似的情况:

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

但是,你正在处理什么用,现在,一起去@ 卡梅隆的回答。

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

4
尽管我同意@Cameron的答案是“现在”的答案,但我认为您的透彻理解使它成为更正确的答案。在现实世界中,很少给我们提供逗号分隔的字符串,并且知道如何转换为列表而不管格式是一件好事。
TristanZimmerman's

39

以下Python代码会将您的字符串转换为字符串列表:

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

3
他们还可以使用json例如:json.loads(teststr)
Mohammad Nazari

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

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

@Clinteney:“ c”表示“创建字符数组”。有关更多信息,请参阅文档
Cameron

我已经投票,但为时过早。我在调用a = array('c',e)时获得array('c','1 1 91 0.001 228')其中e =“ 1 1 91 0.001 228”
Valentin Heinitz 2014年

@ValentinHeinitz是的,这就是我的示例所显示的。你能指望什么 ?
joaquin

1
@joaquin:好的,我明白了。答案没关系。我对“文本== [a,b,c]”应该为“文本== ['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(',')]

我不懂单行循环,永远也不会
比萨先生

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 shell上键入以获取更多信息。


0

使用功能性Python:

text=filter(lambda x:x!=',',map(str,text))

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"]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.