如何将字符串拆分为字符数组?

时间:2011-02-12 15:14:38

标签: python split

我试图环顾网络寻找将字符串拆分成字符数组的答案,但我似乎无法找到一个简单的方法

str.split(//)似乎不像Ruby那样有效。有没有循环的简单方法呢?

16 个答案:

答案 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']

第二个使用maplambda函数。它可能适用于更复杂的任务:

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),即可将您的列表作为字符串返回到它以前的所有荣耀中……