假设 -
string = "abcdefgh"
如果我这样做 -
for i in string:
print (i)
我明白了 -
a
b
c
d
e
f
g
我想要的是 -
ab
bc
cd
de
ef
fg
或者我们指定的任何其他分组。有可能为此做一个功能,记住我们需要的分组吗?感谢
答案 0 :(得分:2)
您可以使用zip()
:
>>> for i, j in zip(string, string[1:]):
... print(i+j)
...
ab
bc
cd
de
ef
fg
gh
作为一项功能:
def func(seq, n):
return [''.join(item) for item in zip(*[seq[n:] for n in range(n)])]
示例:
>>> for item in func("abcdefgh", 3):
... print(item)
...
abc
bcd
cde
def
efg
fgh
答案 1 :(得分:1)
如果s
是字符串的名称,那么这种理解就可以达到你想要的效果:
[s[i:i+2] for i in range(0, len(s) - 1)]
使用此功能,您可以轻松地在不同的行上打印字符串:
for substr in [s[i:i+2] for i in range(0, len(s) -1)]:
print substr
可以相当容易地推广:
def subgroups(s, n):
return [s[i:i+n] for i in range(0, len(s) - 1)]
(此功能可以类似地用于以您喜欢的任何方式打印生成的子串)
答案 2 :(得分:0)
这有效:
string = "abcdefgh"
i = 0
while i < len(string) - 1:
print(string[i]+string[i+1])
i += 1
结果:
ab
bc
cd
de
ef
fg
gh
如果您不想gh
(您的示例中缺少它),请将while循环更改为:while i < len(string) - 2:
。
另一种方法(尚未发布)是通过正则表达式:
import re
print("\n".join(re.findall(r'(?=(\w\w))', 'abcdefgh')))
(?=)
(超前断言)允许正则表达式模式重叠。
答案 3 :(得分:-1)
import re
def splittext(text, split_by):
'''the regex will take a string and create groupings of n-characters plus a final grouping of any remainder. if no remainder is desired, the |.+ can be removed'''
return re.findall(r".{%d}|.+" % split_by, text)
ret = splittext("HELLOWORLD!", 2)
print "\n".join(ret)
一些示例输出
>>> re.findall(r".{2}",a)
['HE', 'LL', 'OW', 'OR', 'LD']
>>> re.findall(r".{2}|.{1}",a)
['HE', 'LL', 'OW', 'OR', 'LD', '!']
>>> re.findall(r".{2}|.*",a)
['HE', 'LL', 'OW', 'OR', 'LD', '!', '']
>>> re.findall(r".{2}|.+",a)
['HE', 'LL', 'OW', 'OR', 'LD', '!']
>>> print "\n".join(_)
HE
LL
OW
OR
LD
!
>>>