如何在Python中使用空分隔符拆分字符串

Sau*_*tro 25 python string split

some_string.split('')在python中有什么好办法?此语法给出错误:

a = '1111'
a.split('')

ValueError: empty separator
Run Code Online (Sandbox Code Playgroud)

我想获得:

['1', '1', '1', '1']
Run Code Online (Sandbox Code Playgroud)

Ter*_*ryA 44

用途list():

>>> list('1111')
['1', '1', '1', '1']
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用map():

>>> map(None, '1111')
['1', '1', '1', '1']
Run Code Online (Sandbox Code Playgroud)

时差:

$ python -m timeit "list('1111')"
1000000 loops, best of 3: 0.483 usec per loop
$ python -m timeit "map(None, '1111')"
1000000 loops, best of 3: 0.431 usec per loop
Run Code Online (Sandbox Code Playgroud)


ole*_*leg 7

可以直接将字符串转换为列表

>>> list('1111')
['1', '1', '1', '1']
Run Code Online (Sandbox Code Playgroud)

或使用列表推导

>>> [i for i in '1111']
['1', '1', '1', '1']
Run Code Online (Sandbox Code Playgroud)

如果想要为超过1个符号长度的子串分割字符串,则第二种方法可能很有用

>>> some_string = '12345'
>>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
['12', '34', '5']
Run Code Online (Sandbox Code Playgroud)


Len*_*bro 5

字符串是可迭代的并且可以被索引,因此你根本不需要拆分它:

>>> for char in '11111':
...   print char
... 
1
1
1
1
1
>>> '11111'[4]
'1'
Run Code Online (Sandbox Code Playgroud)

您可以通过调用 list 来“拆分”它,但这并没有太大区别:

>>> for char in list('11111'):
...   print char
... 
1
1
1
1
1
>>> list('11111')[4]
'1'
Run Code Online (Sandbox Code Playgroud)

因此,只有当您的代码明确需要一个列表时,您才需要这样做。例如:

>>> list('11111').append('2')
>>> l = list('11111')
>>> l.append(2)
>>> l
['1', '1', '1', '1', '1', 2]
Run Code Online (Sandbox Code Playgroud)

这不适用于直字符串:

>>> l.append('2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将需要:

>>> l += '2'
>>> l
'111112'
Run Code Online (Sandbox Code Playgroud)