我试图在网上四处寻找将字符串拆分为字符数组的答案,但似乎找不到一个简单的方法
str.split(//)
似乎不像Ruby那样工作。有没有一种简单的方法可以不循环?
我试图在网上四处寻找将字符串拆分为字符数组的答案,但似乎找不到一个简单的方法
str.split(//)
似乎不像Ruby那样工作。有没有一种简单的方法可以不循环?
Answers:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
你需要清单
cast_method = lambda x: [x]
您将字符串传递给list()
s = "mystring"
l = list(s)
print l
您也可以不用list()来以非常简单的方式进行操作:
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
for
,没有太多的解释。我认为您应该阅读有关数据结构,尤其是列表理解的python教程。
list(map(lambda c: c, iter("foobar")))
,但更具可读性和意义。
如果您想一次处理您的字符串一个字符。您有多种选择。
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
我探索了完成此任务的另外两种方法。这可能对某人有帮助。
第一个很简单:
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文档
任务归结为遍历字符串中的字符并将它们收集到列表中。最幼稚的解决方案看起来像
result = []
for character in string:
result.append(character)
当然,它可以缩短为
result = [character for character in string]
但是仍然有更短的解决方案可以做到这一点。
list
构造函数可用于将任何可迭代的(迭代器,列表,元组,字符串等)转换为列表。
>>> list('abc')
['a', 'b', 'c']
最大的优点是,它在Python 2和Python 3中均相同。
另外,从Python 3.5开始(由于出色的PEP 448),现在可以通过将任何可迭代项解压缩为空列表文字来构建列表:
>>> [*'abc']
['a', 'b', 'c']
这比较整洁,并且在某些情况下比list
直接调用构造函数更有效。
我建议不要使用map
基于方法的方法,因为map
它不会在Python 3中返回列表。请参见如何在Python 3 中使用过滤,映射和精简。
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']
打开包装:
word = "Paralelepipedo"
print([*word])
如果您希望只读访问该字符串,则可以直接使用数组符号。
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'
在不使用正则表达式的情况下可能对测试很有用。字符串是否包含结尾换行符?
>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True
好吧,就像我喜欢列表版本一样,这是我发现的另一种更为冗长的方式(但它很酷,所以我认为我应该将其添加到列表中):
>>> 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']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
>>> for i in range(len(a)):
... print a[i]
...
其中a是您要分离的字符串。值“ a [i]”是字符串的各个字符,可以将它们附加到列表中。
for c in a: print c
更为直接