【发布时间】:2011-07-20 05:19:29
【问题描述】:
如何将字符串转换为列表?
假设字符串类似于text = "a,b,c"。转换后,text == ['a', 'b', 'c'],希望text[0] == 'a',text[1] == 'b'?
【问题讨论】:
如何将字符串转换为列表?
假设字符串类似于text = "a,b,c"。转换后,text == ['a', 'b', 'c'],希望text[0] == 'a',text[1] == 'b'?
【问题讨论】:
像这样:
>>> 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)
【讨论】:
json 例如:json.loads(teststr)
只是补充现有的答案:希望您将来会遇到更多类似的事情:
>>> 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'
【讨论】:
使用函数式 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
字符串是列表。差不多了。
【讨论】:
如果你想用空格分割,你可以使用.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(',')]
【讨论】:
示例 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"]
【讨论】:
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) 方法。请参阅下面的相关帖子。
【讨论】: