How to split a string into array of characters?
我试图环顾网络寻找将字符串拆分成字符数组的答案,但我似乎无法找到一个简单的方法
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'] |
第二个使用
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] |
但仍有较短的解决方案可以做同样的事情。
1 2 | >>> list('abc') ['a', 'b', 'c'] |
最重要的是它在Python 2和Python 3中的工作原理相同。
此外,从Python 3.5开始(感谢令人敬畏的PEP 448)现在可以通过将其解压缩到空列表文字来从任何可迭代构建列表:
1 2 | >>> [*'abc'] ['a', 'b', 'c'] |
这更整洁,在某些情况下比直接调用
我建议不要使用基于
简单:
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("//") |
假设,
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(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]"是字符串的单个字符,这些字符可以附加到列表中。