43

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

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

ValueError: empty separator

我想获得:

['1', '1', '1', '1']
4

5 回答 5

68

使用list()

>>> list('1111')
['1', '1', '1', '1']

或者,您可以使用map()(仅限 Python 2.7):

>>> map(None, '1111')
['1', '1', '1', '1']

时差:

$ 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
于 2013-06-29T13:15:16.887 回答
9

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

>>> list('1111')
['1', '1', '1', '1']

或使用列表推导

>>> [i for i in '1111']
['1', '1', '1', '1']

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

>>> some_string = '12345'
>>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
['12', '34', '5']
于 2013-06-29T13:19:07.417 回答
5

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

>>> for char in '11111':
...   print char
... 
1
1
1
1
1
>>> '11111'[4]
'1'

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

>>> for char in list('11111'):
...   print char
... 
1
1
1
1
1
>>> list('11111')[4]
'1'

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

>>> list('11111').append('2')
>>> l = list('11111')
>>> l.append(2)
>>> l
['1', '1', '1', '1', '1', 2]

这不适用于直字符串:

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

在这种情况下,您需要:

>>> l += '2'
>>> l
'111112'
于 2013-06-29T13:59:10.793 回答
3

方法#1:

s="Amalraj"
l=[i for i in s]
print(l)

输出:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

方法#2:

s="Amalraj"
l=list(s)
print(l)

输出:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

方法#3:

import re; # importing regular expression module
s="Amalraj"
l=re.findall('.',s)
print(l)

输出:

['A', 'm', 'a', 'l', 'r', 'a', 'j']
于 2017-06-04T14:24:49.863 回答
1

如果你像我一样来到这里是为了拆分数据包而不是逐个字符,我做了这个:

>>> n=2
>>> str='423346396677674A446E6838436E304164334A30427874784467567863334942446E41424E413D3D'
>>> [ str[byte:byte+n] for byte in range(0,len(str)) if byte % n == 0 ]
['42', '33', '46', '39', '66', '77', '67', '4A', '44', '6E', '68', '38', '43', '6E', '30', '41', '64', '33', '4A', '30', '42', '78', '74', '78', '44', '67', '56', '78', '63', '33', '49', '42', '44', '6E', '41', '42', '4E', '41', '3D', '3D']
于 2020-07-02T22:20:42.143 回答