列表的带有zip的ngram

时间:2013-01-23 06:07:46

标签: python sequence

我可以像这样制作一个快速而又脏的二元组序列:

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

明星经营者可以帮助我吗?感谢您的光临!

2 个答案:

答案 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)]