在 Python 中创建整数范围列表的最有效和可读的方法是什么?

What is the most efficient and readable way to create a list of lists of integer ranges in Python?

我喜欢在 Python 中学习创建列表的有效方法。我发现自己需要一个整数列表列表,如下所示:

[[5904],
 [5904, 5905],
 [5904, 5905, 5906],
 [5904, 5905, 5906, 5907],
 [5904, 5905, 5906, 5907, 5908],
 [5904, 5905, 5906, 5907, 5908, 5909]]

我既不是专家程序员也不是理论数学家,所以我将 Python 中的以下函数混合在一起以生成列表列表:

def running_list_of_incremented_integer_lists(start, end):
    single_integer_list = new_list = [start]
    integer_lists = [single_integer_list]
    for integer in range(start, end + 1):
        new_list = copy(new_list)
        for _integer in range(integer, integer + 1):
            new_list.append(_integer + 1)
        integer_lists.append(new_list)

    return integer_lists

所以我的问题是:

我仔细阅读了itertools documentation,希望我能把一些东西放在那里使用。

感谢您帮助我学习。

对于python3.x

[list(range(x,5908)) for x in range(5904,5908)]

Out[17]: [[5904, 5905, 5906, 5907], [5905, 5906, 5907], [5906, 5907], [5907]]

一种方法是只使用 range 一次:

def func(start, end):
    l = range(start, end)
    return [l[i:] for i,e in enumerate(l)]

In [248]: func(5904,5910)
Out[248]:
[[5904, 5905, 5906, 5907, 5908, 5909],
 [5905, 5906, 5907, 5908, 5909],
 [5906, 5907, 5908, 5909],
 [5907, 5908, 5909],
 [5908, 5909],
 [5909]]

如果您想要相反的顺序,只需将 [l[i:] for i,e in enumerate(l)] 更改为 [l[i:] for i,e in enumerate(reversed(l))]