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

时间:2014-10-23 19:50:17

标签: python string

我有一个字符串'ABCDEFG' 我希望能够按顺序列出每个字符,然后是下一个字符。 实施例

A B

B C

C D

D E

E F

F G

你能告诉我一个有效的方法吗?感谢

6 个答案:

答案 0 :(得分: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']

答案 1 :(得分:2)

您需要保留最后一个字符,因此请使用izip_longest

中的itertools
>>> 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 

答案 2 :(得分: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

答案 3 :(得分: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']

答案 4 :(得分:0)

您的问题是您有一个字符串列表,而不是字符串:

with open('ref.txt') as f:
    f1 = f.read().splitlines()

f.read()返回一个字符串。您可以在其上调用splitlines(),获取字符串列表(每行一个)。如果您的输入实际上是'ABCDEFG',那么这当然是一个字符串['ABCDEFG']的列表。

    l = list(f1)

由于f1已经是一个列表,这只会使l成为该列表的副本。

     print l, f1, len(l)

这只是打印行列表,行列表的副本和行数。

首先,如果放弃splitlines()会发生什么?然后f1将是字符串'ABCDEFG',而不是包含该字符串的列表。这是一个好的开始。您可以完全删除l部分,因为f1已经是其字符的可迭代部分; list(f1)只是相同字符的不同迭代。

所以,现在你要用下一个字母打印每个字母。一种方法是zip ping 'ABCDEFG''BCDEFG '。但是你如何得到'BCDEFG '?简单;它只是f1[1:] + ' '

所以:

with open('ref.txt') as f:
    f1 = f.read()
    for left, right in zip(f1, f1[1:] + ' '):
        print left, right

当然,对于这么简单的事情,还有很多其他方法可以做同样的事情。您可以迭代range(len(f1))并获得2个元素的切片,或者您可以使用itertools.zip_longest,或者您可以编写一个通用的“从任何可迭代的”大小为N的相邻组“itertools.tee 1}}和zip等等。

答案 5 :(得分:0)

确切地说这个用例是itertools pairwise recipe

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