【问题标题】:Is there a built-in Python function to generate 100 numbers from 0 to 1?是否有内置的 Python 函数可以生成从 0 到 1 的 100 个数字?
【发布时间】:2011-12-28 04:53:48
【问题描述】:

我正在寻找类似range 的东西,但它可以让我指定开始和结束值,以及我想以类似方式使用的集合中需要多少个数字range用于for loops

【问题讨论】:

  • 没有。使用numpy.linspace
  • 我想使用其他库,但是由于这是第三方软件的python集成,添加新库非常痛苦。
  • 喜欢R函数seq(from,to,length)和它的docpage

标签: python math loops range sequence


【解决方案1】:

Python 没有浮点范围函数,但您可以通过列表推导轻松模拟一个:

>>> lo = 2.0
>>> hi = 12.0
>>> n = 20
>>> [(hi - lo) / n * i + lo for i in range(n)]
[2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, 10.5, 11.0, 11.5]

请注意,在数值应用程序中,人们通常希望包含两个端点,而不是像 Python 的内置 range() 函数那样具有半开区间。如果您需要两个端点,您可以通过将range(n) 更改为range(n+1) 轻松添加。

另外,考虑使用 numpy,它已经内置了 arange()linspace() 等工具。

【讨论】:

  • 谢谢,您能告诉我如何在 for 循环中使用吗?
  • 感谢您的示例,它是否还可以将 hi 作为最后一个元素?
  • @Joan 与range 的行为冲突,所以我通常会避免这样做。
  • 哦,好吧,那我不会使用它,因为我希望将两端都包含在序列中,在我的情况下是从 0 到 1,但我明白你的意思。
  • @JoanVenge 编辑了答案以显示如何通过将 range(n) 更改为 range(n+1) 来包含两个端点。
【解决方案2】:

不,没有内置函数可以做你想做的事。但是,您始终可以定义自己的range

def my_range(start, end, how_many):
    incr = float(end - start)/how_many
    return [start + i*incr for i in range(how_many)]

您可以像使用 range 一样在 for 循环中使用:

>>> for i in my_range(0, 1, 10):
...     print i
... 
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9

编辑:如果您希望 startend 成为结果的一部分,您的 my_range 函数将是:

def my_range(start, end, how_many):
    incr = float(end - start)/(how_many - 1)
    return [start + i*incr for i in range(how_many-1)] + [end]

在你的 for 循环中:

>>> for i in my_range(0, 1, 10):
...   print i
... 
0.0
0.111111111111
0.222222222222
0.333333333333
0.444444444444
0.555555555556
0.666666666667
0.777777777778
0.888888888889
1

【讨论】:

  • 谢谢,但就我而言,我需要支架和末端都在序列中。
【解决方案3】:

你仍然可以使用range,你知道的。你只需要从大做起,然后分道扬镳:

for x in range(100):
    print x/100.0

如果要包含端点:

for x in range(101):
    print x/100.0

【讨论】:

  • 这就是我现在正在做的事情,但我想可能有一个巧妙的方法可以做到这一点。
  • 也许你可以让它更通用,有低、高和计数。
  • 其实我也不能用这个,因为这个序列中也不包括100):
【解决方案4】:

numpy 中有一个特殊的函数可以做到这一点:linspace。当然,您必须先安装 numpy。你可以在here找到更多相关信息。

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 2022-08-04
    • 2012-12-17
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    相关资源
    最近更新 更多