如何在两个值之间创建一个升序列表?例如,11和16之间的列表:

[11, 12, 13, 14, 15, 16]

当前回答

@YTZ的回答很适合我。我必须生成一个从0到10000的列表,步长为0.01,由于舍入问题,在每次迭代中简单地添加0.01是行不通的。

因此,我采纳了@YTZ的建议,编写了如下函数:

import numpy as np


def generate_floating_numbers_in_range(start: int, end: int, step: float):
    """
    Generate a list of floating numbers within a specified range.

    :param start: range start
    :param end: range end
    :param step: range step
    :return:
    """
    numbers = np.linspace(start, end,(end-start)*int(1/step)+1).tolist()
    return [round(num, 2) for num in numbers]

其他回答

我来到这里是因为我想使用列表推导式创建一个增量为0.1的-10到10之间的范围。而不是像上面大多数答案那样做一个过于复杂的函数,我只是这样做了

simple_range = [ x*0.1 for x in range(-100, 100) ]

通过将范围计数更改为100,我现在通过使用标准范围函数得到了从-10到10的范围。所以如果你需要0.2,那么就做范围(- 200,200)等等

如果你正在寻找适用于浮点类型的范围函数,那么这是一篇非常好的文章。

def frange(start, stop, step=1.0):
    ''' "range()" like function which accept float type''' 
    i = start
    while i < stop:
        yield i
        i += step
# Generate one element at a time.
# Preferred when you don't need all generated elements at the same time. 
# This will save memory.
for i in frange(1.0, 2.0, 0.5):
    print i   # Use generated element.
# Generate all elements at once.
# Preferred when generated list ought to be small.
print list(frange(1.0, 10.0, 0.5))    

输出:

1.0
1.5
[1.0, 1.5, 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]

@YTZ的回答很适合我。我必须生成一个从0到10000的列表,步长为0.01,由于舍入问题,在每次迭代中简单地添加0.01是行不通的。

因此,我采纳了@YTZ的建议,编写了如下函数:

import numpy as np


def generate_floating_numbers_in_range(start: int, end: int, step: float):
    """
    Generate a list of floating numbers within a specified range.

    :param start: range start
    :param end: range end
    :param step: range step
    :return:
    """
    numbers = np.linspace(start, end,(end-start)*int(1/step)+1).tolist()
    return [round(num, 2) for num in numbers]

你似乎在寻找range():

>>> x1=11
>>> x2=16
>>> range(x1, x2+1)
[11, 12, 13, 14, 15, 16]
>>> list1 = range(x1, x2+1)
>>> list1
[11, 12, 13, 14, 15, 16]

如果要增加0.5而不是1,那么:

>>> list2 = [x*0.5 for x in range(2*x1, 2*x2+1)]
>>> list2
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]

最优雅的方法是使用range函数,但是如果你想重新创建这个逻辑,你可以这样做:

def custom_range(*args):
    s = slice(*args)
    start, stop, step = s.start, s.stop, s.step
    if 0 == step:
        raise ValueError("range() arg 3 must not be zero")
    i = start
    while i < stop if step > 0 else i > stop:
        yield i
        i += step

>>> [x for x in custom_range(10, 3, -1)]

这将产生输出:

[10, 9, 8, 7, 6, 5, 4]

正如之前@Jared所表达的,最好的方法是使用range或numpy。然而,我发现代码很有趣,可以分享。