【问题标题】:What is the most efficient and readable way to create a list of lists of integer ranges in Python?在 Python 中创建整数范围列表的最有效和最易读的方法是什么?
【发布时间】:2015-12-26 22:59:01
【问题描述】:

我喜欢学习在 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

所以我的问题是:

  • 是否有更高效和/或 Python 风格的方式来编写这段代码?
  • Python 中是否有任何模块可以帮助编写此代码?
  • 这种类型的列表有技术名称吗?

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

感谢您帮助我学习。

【问题讨论】:

  • [range(5094, 5095+n) for n in range(6)]?
  • 把它变成答案。
  • 是的。这就是我一直在寻找的。谢谢!
  • min, max = 5904, 5909; intLists = [ range(min, x) for x in range(min + 1, max + 2) ]
  • + 1 用于将最小值和最大值放入变量中。我会使用这个版本。谢谢你帮助我学习。 (我将最小值、最大值更改为最小值和最大值,因为 min 和 max 已经在 Python 中定义了函数。)

标签: python list math integer


【解决方案1】:

对于 python 3.x

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

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

【讨论】:

  • 我在我的代码中使用了这个:minimum, maximum = 5904, 5909; [list(range(minimum, x)) for x in range(minimum + 1, maximum + 2)]
【解决方案2】:

一种方法是只使用一次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))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多