我试图在一个列表中的所有单词之间创建bigram。我可以用单词+顺流来创造双字组。但我不能把一个词和名单上的其他词结合起来
脚本:
countries = ['france', 'brazil', 'usa', 'uk', 'canada', 'mexico', 'angola']
countries_bigrams = zip(*[countries[i:] for i in range(2)])
print(list(countries_bigrams))
我的输出:
[('france', 'brazil'), ('brazil', 'usa'), ('usa', 'uk'), ('uk', 'canada'), ('canada', 'mexico'), ('mexico', 'angola')]
良好输出:
[('france', 'brazil'), ('france', 'usa'), ('france', 'uk'), ('france', 'canada'), ('france', 'mexico'), ('france', 'angola'), ('brazil', 'france'), ('brazil', 'usa'), ('brazil', 'uk'), ('brazil', 'canada'), ('brazil', 'mexico'), ('brazil', 'angola'), ...]
可以使用^{} 获取列表本身的Cartesian product,并使用列表理解删除重复值的元组:
输出:
请注意,这并不是得到bigrams,您原来的方法已经得到了bigrams
您可以简单地使用列表理解:
输出:
您需要计算大小2的组合。一个好方法是使用itertools:
作为输出:
我认为这是一个更快的方法,我比较了我的机器的性能:
大约需要1.28µs码
大约需要4.81µs码
大约5.81µs码
相关问题 更多 >
编程相关推荐