在 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
所以我的问题是:
- 是否有更高效的and/or Pythonic 方式来编写这段代码?
- Python 中是否有任何模块可以帮助编写此代码?
- 是否有此类列表的技术名称?
我仔细阅读了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))]
我喜欢在 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
所以我的问题是:
- 是否有更高效的and/or Pythonic 方式来编写这段代码?
- Python 中是否有任何模块可以帮助编写此代码?
- 是否有此类列表的技术名称?
我仔细阅读了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))]