Python 从字符串生成所有n元组

Python 从字符串生成所有n元组,python,string,Python,String,有没有一种简单的pythonic方法可以从字符串生成给定长度的所有n元组 例如,我希望generateTuples(“Hello,World!”,3)生成以下内容: [ "Hel", "ell", "llo", "lo,", "o, ", ", W", " Wo", "Wor", "orl", "rld", "ld!" ] 这可能就是你要找的 >>> st="Hello, World!" >>> [st[i:i+3] for i in xrange(0,le

有没有一种简单的pythonic方法可以从字符串生成给定长度的所有n元组

例如,我希望
generateTuples(“Hello,World!”,3)
生成以下内容:

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

这可能就是你要找的

>>> 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)]

这是一个奇怪但非常聪明的解决方案。我花了一点时间才弄清楚到底发生了什么。我觉得在常规代码中使用它太混乱了,但在计算出逻辑后,我觉得它是一个相当优雅的解决方案+我很感谢你教我一些东西。我认为这可能是IMO中最优雅的解决方案,尽管如果你正在寻找最有效的代码,它肯定不是很好…:\
>>> def generateTuples(st,n):
        return [st[i:i+n] for i in xrange(0,len(st)-n+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!']
>>> 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!']