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

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

假设字符串类似于 text = "a,b,c"。在转换之后,text == ['a', 'b', 'c'],希望是 text[0] == 'a'text[1] == 'b'

715759 次浏览

像这样:

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

如果你真的想要数组:

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

我通常用:

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

strip删除单词周围的空格。

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


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

应该对字符串使用内置的 translate方法。

在 Python shell 中键入 help('abc'.translate)以获得更多信息。

下面的 Python 代码将把字符串转换为字符串列表:

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

仅仅为了补充现有的答案: 希望将来你会遇到更多类似的情况:

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

使用函数式 Python:

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

我不认为你 需要

在 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

字符串就是列表,差不多。

如果你想用空格分割,你可以使用 .split():

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

产出:

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

为了转换具有 a="[[1, 3], [2, -6]]"形式的 string,我编写了尚未优化的代码:

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
m = '[[1,2,3],[4,5,6],[7,8,9]]'


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


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

所有的答案都是好的,还有另外一种方法,那就是列表内涵,看下面的解决方案。

u = "UUUDDD"


lst = [x for x in u]

对于逗号分隔的列表,请执行下列操作

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


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

例子一

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

split()是你的朋友。我将涉及到 split()的一些方面,这些方面是其他答案所没有涉及到的。

  • 如果没有参数传递给 split(),它将根据空格字符(空格、制表符和换行符)拆分字符串。忽略前导空格和尾随空格。此外,连续的空格被视为单个分隔符。

例如:

>>> "   \t\t\none  two    three\t\t\tfour\nfive\n\n".split()
['one', 'two', 'three', 'four', 'five']
  • 当传递单个字符分隔符时,split()的行为与其默认行为完全不同。在这种情况下,前/后分隔符不会被忽略,重复分隔符也不会“合并”成一个。

例如:

>>> ",,one,two,three,,\n four\tfive".split(',')
['', '', 'one', 'two', 'three', '', '\n four\tfive']

因此,如果在基于非空格分隔符拆分字符串时需要剥离空格,请使用以下结构:

words = [item.strip() for item in string.split(',')]
  • 当多字符字符串作为分隔符传递时,它被视为单个分隔符,而不是作为字符类或一组分隔符。

例如:

>>> "one,two,three,,four".split(',,')
['one,two,three', 'four']

要将多个分隔符合并为一个,您需要使用 re.split(regex, string)方法。


相关资料