def list_ngram_range(token_list, *args, **kwargs):
m, n = (args if len(args) > <NUM_LIT:1> else ((<NUM_LIT:0>, args[<NUM_LIT:0>]) if args else (<NUM_LIT:0>, <NUM_LIT:1>)))<EOL>join = args[<NUM_LIT:2>] if len(args) > <NUM_LIT:2> else kwargs.pop('<STR_LIT>', True)<EOL>return list(chain(*(list_ngrams(token_list, i + <NUM_LIT:1>, join=join) for i in range(<NUM_LIT:0>, n))))<EOL>
Return a list of n-tuples, one for each possible sequence of n items in the token_list

    Arguments:
      join (bool or str): if str, then join ngrom tuples on it before returning
         True is equivalent to join=' '
         default = True

    >>> list_ngram_range('goodbye cruel world'.split(), 0, 2, join=False)
    [('goodbye',), ('cruel',), ('world',), ('goodbye', 'cruel'), ('cruel', 'world')]
    >>> list_ngram_range('goodbye cruel world'.split(), 2, join=False)
    [('goodbye',), ('cruel',), ('world',), ('goodbye', 'cruel'), ('cruel', 'world')]
    >>> list_ngram_range('goodbye cruel world'.split(), 0, 2, join='|')
    ['goodbye', 'cruel', 'world', 'goodbye|cruel', 'cruel|world']
    >>> list_ngram_range('goodbye cruel world'.split(), 0, 2, join=True)
    ['goodbye', 'cruel', 'world', 'goodbye cruel', 'cruel world']