2012-04-08 5 views
1

からすべてのn-タプルを生成すると、文字列から指定された長さの全てのn-タプルを生成するためのシンプルな、ニシキヘビ、方法はありますか?は、文字列

[ "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!'] 

探しているものやしたい場合は、あなたのようにそれを書くことができます。

例えば、私は次の製造にgenerateTuples("Hello, World!", 3)をしたいと思います機能:

>>> 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しました。 –

+0

これはおそらく、最も効率的なコードを探しているなら間違いなく良いですが、これはおそらく最もエレガントなソリューションのIMOだと思います。:\ – jamylak

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!']