如何在Python中将字符串拆分为字符

-3 投票
6 回答
571 浏览
提问于 2025-04-29 08:10

我有一个字符串 'ABCDEFG',我想把每个字符按顺序列出来,后面跟着下一个字符。

比如:

A B

B C

C D

D E

E F

F G

G

你能告诉我一个简单有效的方法来做到这一点吗?谢谢!

暂无标签

6 个回答

0

如果你想在字符之间留出空格,可以使用 zip 函数和列表推导式:

>>> s="ABCDEFG"
>>> l=[' '.join(i) for i in zip(s,s[1:])]
['A B', 'B C', 'C D', 'D E', 'E F', 'F G']
>>> for i in l:
...  print i
... 
A B
B C
C D
D E
E F
F G

如果你不想留空格,只需使用列表推导式:

    >>> [s[i:i+2] for i in range(len(s))]
['AB', 'BC', 'CD', 'DE', 'EF', 'FG', 'G']
0

这里有一个关于 itertools 中的 pairwise 例子,正好适合这种情况:

import itertools

def pairwise(myStr):
    a,b = itertools.tee(myStr)
    next(b,None)
    for s1,s2 in zip(a,b):
        print(s1,s2)

输出结果:

In [121]: pairwise('ABCDEFG')
A B
B C
C D
D E
E F
F G
1
def doit(input):
    for i in xrange(len(input)):
        print input[i] + (input[i + 1] if i != len(input) - 1 else '')

doit("ABCDEFG")

这段代码的结果是:

>>> doit("ABCDEFG")
AB
BC
CD
DE
EF
FG
G
2

你需要保留最后一个字符,所以可以使用 itertools 里的 izip_longest

>>> import itertools
>>> s =  'ABCDEFG'
>>> for c, cnext in itertools.izip_longest(s, s[1:], fillvalue=''):
...     print c, cnext
...     
A B
B C
C D
D E
E F
F G
G 
3

在Python中,字符串本身就可以看作是一个字符的列表,所以你不需要去拆分它;它已经是“拆分”的状态了。你只需要构建你的子字符串列表。

不太清楚你想要的结果是什么样的。如果你只是想要子字符串,这样做就可以:

s = 'ABCDEFG'
[s[i:i+2] for i in range(len(s))]
#=> ['AB', 'BC', 'CD', 'DE', 'EF', 'FG', 'G']

如果你想要的结果是列表形式的对,而不是字符串,只需要对每一个调用一下 list 就可以了:

[list([s[i:i+2]) for i in range(len(s))]
#=> [['A', 'B'], ['B', 'C'], ['C', 'D'], ['D', 'E'], ['E', 'F'], ['F', 'G'], ['G']]

如果你最后还是想要字符串,但希望字母之间有空格,可以在调用 list 后把它们再连接起来:

[' '.join(list(s[i:i+2])) for i in range(len(s))]
#=> ['A B', 'B C', 'C D', 'D E', 'E F', 'F G', 'G']

撰写回答