2012-04-08 33 views
1

是否有一種簡單的pythonic方法來從字符串生成給定長度的所有n元組?從字符串生成所有n元組

例如,我想generateTuples("Hello, World!", 3)產生以下:

[ "Hel", "ell", "llo", "lo,", "o, ", ", W", " Wo", "Wor", "orl", "rld", "ld!" ] 

回答

1
>>> a = "Hello, World!" 
>>> def generate_tuples(string, n): 
...  return [string[i:i+n] for i in range(len(string)-n+1)] 
... 
>>> generate_tuples(a, 3) 
['Hel', 'ell', 'llo', 'lo,', 'o, ', ', W', ' Wo', 'Wor', 'orl', 'rld', 'ld!'] 
1

這可能是你在找什麼

>>> st="Hello, World!" 
>>> [st[i:i+3] for i in xrange(0,len(st)-2)] 
['Hel', 'ell', 'llo', 'lo,', 'o, ', ', W', ' Wo', 'Wor', 'orl', 'rld', 'ld!'] 

,或者如果你願意,你可以把它寫成功能:

>>> def generateTuples(st,n): 
     return [st[i:i+n] for i in xrange(0,len(st)-n+1)] 
1
>>> text = "Hello, World!" 
>>> map(''.join,zip(*(text[i:] for i in range(3)))) 
['Hel', 'ell', 'llo', 'lo,', 'o, ', ', W', ' Wo', 'Wor', 'orl', 'rld', 'ld!'] 
+1

這是一個奇怪的,但非常非常聰明的解決方案。花了我一些時間來弄清楚到底發生了什麼。它讓我覺得在常規代碼中使用時太混亂,但在研究出邏輯後,它成爲了一個非常優雅的解決方案。爲我教了一些東西+1。 – 2012-04-08 20:48:29

+0

我認爲這可能是最優雅的解決方案國際海事組織,但它絕對不是很好,如果你正在尋找最有效的代碼...:\ \ – jamylak 2012-04-09 00:20:51

0
>>> text = "Hello, World!" 
>>> 
>>> def subseqs(seq, length): 
...  for i in xrange(len(seq) - length + 1): 
...   yield seq[i:i+length] 
... 
>>> map(''.join, subseqs(text, 3)) 
['Hel', 'ell', 'llo', 'lo,', 'o, ', ', W', ' Wo', 'Wor', 'orl', 'rld', 'ld!']