4

次のように、すばやくダーティなバイグラム シーケンスを作成できます。

>>> w = ['a', 'b', 'c', 'd']
>>> zip(w, w[1:])
[('a', 'b'), ('b', 'c'), ('c', 'd')]

n-gram の数値引数 n を受け入れる関数を作成したいと考えています。上記のように、その引数を取得して zip 引数を自動的に入力するにはどうすればよいですか? 言い換えれば、私の機能:

>>> make_ngrams(w, 3)

作成します

>>> zip(w, w[1:], w[2:])

その場で、そして戻ります:

[('a', 'b', 'c'), ('b', 'c', 'd')]

スターオペレーターはここで私を助けてくれますか? 洞察をありがとう!

4

2 に答える 2

10
def make_ngrams(lst, n):
    return zip(*(lst[i:] for i in xrange(n)))

*演算子は基本的に iterable のすべての要素を取り、それらを個別の引数として関数に渡します。

于 2013-01-23T06:11:37.730 に答える
2
def ngram(L, n):
    return [tuple(L[i:i+n]) for i in xrange(len(L)-n+1)]
于 2013-01-23T06:23:42.030 に答える