假設 -如何迭代一個字符串中的n個字符組而不是一次一個字符?
string = "abcdefgh"
如果我這樣做 -
for i in string:
print (i)
我得到 -
a
b
c
d
e
f
g
我要的是一樣的東西 -
ab
bc
cd
de
ef
fg
或以其他任何按我們的規格分組IFY。爲了記住我們需要的分組,我們可以做一個函數嗎?由於
假設 -如何迭代一個字符串中的n個字符組而不是一次一個字符?
string = "abcdefgh"
如果我這樣做 -
for i in string:
print (i)
我得到 -
a
b
c
d
e
f
g
我要的是一樣的東西 -
ab
bc
cd
de
ef
fg
或以其他任何按我們的規格分組IFY。爲了記住我們需要的分組,我們可以做一個函數嗎?由於
這工作:
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')))
的(?=)
(前向斷言),允許正則表達式模式重疊。
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
!
>>>
這不是他們想要的... – Li357
聰明。不幸的是,聰明通常是一個壞主意的標誌。 –
你最初的例子幾乎是正確的,你只需要添加'overlapped = True',看[這裏](http://stackoverflow.com/a/18966698/1695437)。或者,你可以使用前瞻斷言('(?=)')。 – Darkstarone
可以使用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
如果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)]
(並且此功能可以類似地用於以您喜歡的任何方式打印所得到的子串)
相關:http://stackoverflow.com/questions/312443/how-do-you-split-a-list-成均勻大小的塊 – TerryA