代码之家  ›  专栏  ›  技术社区  ›  GSto

从单词列表创建三元组

  •  4
  • GSto  · 技术社区  · 15 年前

    假设我有一个单词列表,如下所示:

    ['The', 'Quick', 'Brown', 'Fox', 'Jumps', 'Over', 'The', 'Lazy', 'Dog']
    

    我想生成一个列表,每个数组包含3个单词,但每个单词可能有三个。所以应该是这样的:

    ['The', 'Quick', 'Brown']
    ['Quick', 'Brown', 'Fox']
    ['Brown', 'Fox', 'Jumps']
    

    等等。获得这个结果的最好方法是什么?

    4 回复  |  直到 7 年前
        1
  •  7
  •   John Kugelman Michael Hodel    15 年前
    >>> 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']]
    
        2
  •  5
  •   Jonathan Feinberg    15 年前
    b = [a[i:i+3] for i in range(len(a)-2)]
    
        3
  •  3
  •   Alex Martelli    15 年前

    对于像列表这样的可分割的序列,已经给出的答案可以很好地工作。对于一般情况下,单词出现在任何一个iterable中(无论它是序列、文件还是任何东西):

    def NbyN(seq, N=3):
      it = iter(seq)
      window = [next(it) for _ in range(N)] 
      while True:
        yield window
        window = window[1:] + [next(it)]
    
        4
  •  -1
  •   Azeem.Butt    15 年前

    不知道你为什么要这样做,也不知道需要做多少次,我想说的是把它切成薄片。