我试图环顾网络寻找将字符串拆分成字符数组的答案,但我似乎无法找到一个简单的方法
str.split(//)
似乎不像Ruby那样有效。有没有循环的简单方法呢?
答案 0 :(得分:769)
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
您需要list
答案 1 :(得分:65)
您获取字符串并将其传递给list()
s = "mystring"
l = list(s)
print l
答案 2 :(得分:57)
您也可以在没有list()的情况下以这种非常简单的方式完成:
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
答案 3 :(得分:29)
如果要一次处理String一个字符。你有各种选择。
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
答案 4 :(得分:20)
我探索了另外两种方法来完成这项任务。这可能对某人有帮助。
第一个很简单:
In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']
第二个使用map
和lambda
函数。它可能适用于更复杂的任务:
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
答案 5 :(得分:17)
任务归结为迭代字符串的字符并将它们收集到列表中。最天真的解决方案看起来像
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
构造函数更有效。
我建议不要使用基于map
的方法,因为map
不会在Python 3中返回一个列表。请参阅 How to use filter, map, and reduce in Python 3 < / em>的
答案 6 :(得分:14)
简单:
s = 'My'
print(list(s))
答案 7 :(得分:10)
我只需要一个字符数组:
arr = list(str)
如果要按特定的str拆分str:
# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
答案 8 :(得分:8)
split()
内置函数将仅根据特定条件来分隔值,但在单个单词中,它无法满足条件。因此,可以借助list()
来解决。它在内部调用Array,并将基于数组存储值。
假设
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']
答案 9 :(得分:3)
如果您只想读取对字符串的访问权限,可以直接使用数组表示法。
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
答案 10 :(得分:3)
您也可以在列表操作中使用extend
方法。
>>> list1 = []
>>> list1.extend('somestring')
>>> list1
['s', 'o', 'm', 'e', 's', 't', 'r', 'i', 'n', 'g']
答案 11 :(得分:2)
好吧,就像我喜欢的列表版本一样,这是我发现的另一种更冗长的方式(但它很酷,所以我想我会把它添加到战斗中):
>>> 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']
答案 12 :(得分:2)
from itertools import chain
string = 'your string'
chain(string)
类似于list(string)
,但返回一个生成器,该生成器在使用时被延迟评估,因此内存效率高。
答案 13 :(得分:0)
>>> for i in range(len(a)):
... print a[i]
...
其中a是您要分离的字符串。值“a [i]”是字符串的单个字符,可以附加到列表中。
答案 14 :(得分:0)
解压它们:
word = "Paralelepipedo"
print([*word])
答案 15 :(得分:-1)
要分割字符串s
,最简单的方法是将其传递给list()
。所以,
s = 'abc'
s_l = list(s) # s_l is now ['a', 'b', 'c']
您还可以使用列表推导功能,该方法可以实现,但不像上面那样简洁:
s_l = [c for c in s]
还有其他方法,但是这些方法就足够了。
以后,如果您想重新组合它们,只需简单地调用"".join(s_l)
,即可将您的列表作为字符串返回到它以前的所有荣耀中……