关于python:如何将字符串拆分为字符数组?

How to split a string into array of characters?

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

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


1
2
3
>>> s ="foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

你需要清单


你取出字符串并将其传递给list()

1
2
3
s ="mystring"
l = list(s)
print l


您也可以在没有list()的情况下以这种非常简单的方式执行此操作:

1
2
>>> [c for c in"foobar"]
['f', 'o', 'o', 'b', 'a', 'r']


如果要一次处理String一个字符。你有各种选择。

1
uhello = u'Hello\u0020World'

Using List comprehension:

1
print([x for x in uhello])

输出:

1
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Using map:

1
print(list(map(lambda c2: c2, uhello)))

输出:

1
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Calling Built in list function:

1
print(list(uhello))

输出:

1
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Using for loop:

1
2
for c in uhello:
    print(c)

输出:

1
2
3
4
5
6
7
8
9
10
11
H
e
l
l
o

W
o
r
l
d

我探索了另外两种完成这项任务的方法。这可能对某人有帮助。

第一个很简单:

1
2
3
4
5
In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

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

1
2
3
4
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']

例如

1
2
3
4
# 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


任务归结为迭代字符串的字符并将它们收集到列表中。最天真的解决方案看起来像

1
2
3
result = []
for character in string:
    result.append(character)

当然,它可以简化为

1
result = [character for character in string]

但仍有较短的解决方案可以做同样的事情。

list构造函数可用于将任何可迭代(迭代器,列表,元组,字符串等)转换为列表。

1
2
>>> list('abc')
['a', 'b', 'c']

最重要的是它在Python 2和Python 3中的工作原理相同。

此外,从Python 3.5开始(感谢令人敬畏的PEP 448)现在可以通过将其解压缩到空列表文字来从任何可迭代构建列表:

1
2
>>> [*'abc']
['a', 'b', 'c']

这更整洁,在某些情况下比直接调用list构造函数更有效。

我建议不要使用基于map的方法,因为map不会在Python 3中返回列表。请参阅如何在Python 3中使用filter,map和reduce。


简单:

1
2
s = 'My'    
print(list(s))

我只需要一组字符:

1
arr = list(str)

如果你想用特定的str分割str:

1
2
# str ="temp//temps" will will be ['temp', 'temps']
arr = str.split("//")

split()内置函数只会在一定条件的基础上分离值,但在单个单词中,它不能满足条件。因此,它可以在list()的帮助下解决。它在内部调用Array,它将根据数组存储值。

假设,

1
2
3
4
5
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']

如果您希望只读取对字符串的访问权限,则可以直接使用数组表示法。

1
2
3
4
5
6
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的情况下进行测试。
字符串是否包含结尾换行符?

1
2
3
4
5
6
7
8
>>> t[-1] == '
'

False
>>> t = 'my string
'

>>> t[-1] == '
'

True

1
2
3
4
from itertools import chain

string = 'your string'
chain(string)

类似于list(string)但返回一个在使用时被懒惰评估的生成器,因此内存效率很高。


好吧,就像我喜欢list(s)版本一样,这是我发现的另一种更冗长的方式(但它很酷,所以我想我会把它添加到战斗中):

1
2
3
>>> 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']

1
2
3
>>> for i in range(len(a)):
...     print a[i]
...

其中a是您要分离的字符串。值"a [i]"是字符串的单个字符,这些字符可以附加到列表中。