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

运算符基本上获取可迭代的*所有元素并将它们作为单独的参数提供给函数。

于 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 回答