假设我有一个单词列表,如下所示:
['The', 'Quick', 'Brown', 'Fox', 'Jumps', 'Over', 'The', 'Lazy', 'Dog']
我想生成一个列表列表,每个数组包含3个单词,但每个单元都有一个可能的三元组。所以看起来应该是这样的:
['The', 'Quick', 'Brown']
['Quick', 'Brown', 'Fox']
['Brown', 'Fox', 'Jumps']
等等。得到这个结果的最佳方法是什么?
答案 0 :(得分:7)
>>> words
['The', 'Quick', 'Brown', 'Fox', 'Jumps', 'Over', 'The', 'Lazy', 'Dog']
>>> [words[i:i+3] for i in range(len(words) - 2)]
[['The', 'Quick', 'Brown'], ['Quick', 'Brown', 'Fox'], ['Brown', 'Fox', 'Jumps'], ['Fox', 'Jumps', 'Over'], ['Jumps', 'Over', 'The'], ['Over', 'The', 'Lazy'], ['The', 'Lazy', 'Dog']]
答案 1 :(得分:5)
b = [a[i:i+3] for i in range(len(a)-2)]
答案 2 :(得分:3)
使用可切片序列(例如列表),已经给出的答案可以正常工作。对于任何可迭代的单词(无论是序列,文件,等等)的一般情况:
def NbyN(seq, N=3):
it = iter(seq)
window = [next(it) for _ in range(N)]
while True:
yield window
window = window[1:] + [next(it)]
答案 3 :(得分:-1)
我不知道你为什么要这么做或需要完成多少次,我只想说它。