我可以像这样制作一个快速而又脏的二元组序列:
>>> 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')]
明星经营者可以帮助我吗?感谢您的光临!
答案 0 :(得分:10)
def make_ngrams(lst, n):
return zip(*(lst[i:] for i in xrange(n)))
*
运算符基本上接受了iterable的所有元素,并将它们作为单独的参数提供给函数。
答案 1 :(得分:2)
def ngram(L, n):
return [tuple(L[i:i+n]) for i in xrange(len(L)-n+1)]