是否有一种简单的pythonic方法来从字符串生成给定长度的所有n元组?从字符串生成所有n元组
例如,我想generateTuples("Hello, World!", 3)
产生以下:
[ "Hel", "ell", "llo", "lo,", "o, ", ", W", " Wo", "Wor", "orl", "rld", "ld!" ]
是否有一种简单的pythonic方法来从字符串生成给定长度的所有n元组?从字符串生成所有n元组
例如,我想generateTuples("Hello, World!", 3)
产生以下:
[ "Hel", "ell", "llo", "lo,", "o, ", ", W", " Wo", "Wor", "orl", "rld", "ld!" ]
>>> 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!']
这可能是你在找什么
>>> 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)]
>>> 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!']
这是一个奇怪的,但非常非常聪明的解决方案。花了我一些时间来弄清楚到底发生了什么。它让我觉得在常规代码中使用时太混乱,但在研究出逻辑后,它成为了一个非常优雅的解决方案。为我教了一些东西+1。 – 2012-04-08 20:48:29
我认为这可能是最优雅的解决方案国际海事组织,但它绝对不是很好,如果你正在寻找最有效的代码...:\ \ – jamylak 2012-04-09 00:20:51