Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-创建数字在2个值之间的列表?_Python_List - Fatal编程技术网

Python-创建数字在2个值之间的列表?

Python-创建数字在2个值之间的列表?,python,list,Python,List,如何创建一个列表,其中的值介于我输入的两个值之间? 例如,为11到16之间的值生成以下列表: list = [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]

如何创建一个列表,其中的值介于我输入的两个值之间? 例如,为11到16之间的值生成以下列表:

list = [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]

在python中使用列表理解。因为你也希望名单上有16个。。使用x2+1。范围函数不包括函数中的上限

列表=[x代表范围内的x(x1,x2+1)]

使用。在Python2.x中,它返回一个列表,因此您只需要:

>范围(11,17)
[11, 12, 13, 14, 15, 16]
在Python中,3.x是一个迭代器。因此,您需要将其转换为列表:

列表(范围(11,17)) [11, 12, 13, 14, 15, 16] 注意:第二个数字是独占的。因此,这里它需要是
16+1
=
17

编辑:

要回答有关按
0.5
递增的问题,最简单的选项可能是使用和:

>>将numpy作为np导入
>>>np.arange(11,17,0.5).tolist()
[11.0, 11.5, 12.0, 12.5, 13.0, 13.5,
14.0, 14.5, 15.0, 15.5, 16.0, 16.5]

假设您想要在x到y之间的范围

range(x,y+1)

>>> range(11,17)
[11, 12, 13, 14, 15, 16]
>>>
使用3.x支持列表

尝试:

range(x1,x2+1)  
这是Python2.x中的一个列表,其行为与Python3.x中的列表非常相似。如果您正在运行Python 3,并且需要可以修改的列表,请使用:

list(range(x1,x2+1))

如果您正在寻找适用于浮点型的类似范围的函数,那么这里有一个非常好的例子


以上每个答案都假设范围仅为正数。下面是返回连续数字列表的解决方案,其中参数可以是任意的(正或负),并且可以设置可选的步长值(默认值=1)

def任意数字范围(a、b、s=1):
“”“使用可选步骤在两个数字之间生成连续值列表(默认值为1)。”
如果(a==b):
归还
其他:
mx=最大值(a,b)
mn=最小值(a,b)
结果=[]
#包括上限。如果不需要,请删除下一行中的“+1”
而(mn0:
结果追加(mn)
mn+=s
#如果阶跃为负,则从最大到最小
如果s<0:
结果追加(mx)
mx+=s
返回结果
例如,标准命令
list(范围(1,-3))
返回空列表
[]
,而此函数将返回
[-3,-2,-1,0,1]


已更新:现在步骤可能为负数。感谢@Michael的评论。

最优雅的方法是使用
范围
功能,但是如果您想重新创建此逻辑,可以执行以下操作:

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)]

正如@Jared之前所表达的,最好的方法是使用
范围或
numpy.arrange
但是我发现代码很有趣,可以共享。

在python中,您可以非常轻松地完成这项工作

start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
或者,您可以创建一个递归函数,该函数返回一个数组,最多返回一个给定的数字:

ar=[]
def diff(start,end):
    if start==end:
        d.append(end)
        return ar
    else:
        ar.append(end)
        return diff(start-1,end) 
输出:
ar=[10,9,8,7,6,5,4,3,2,1,0]

虽然@Jared对
0.5
步长递增的回答,但由于舍入问题,它对其他步长无效:

np.arange(11, 17, 0.1).tolist()
# [11.0,11.1,11.2,11.299999999999999, ...   16.79999999999998, 16.899999999999977]
相反,我自己也需要这样的东西,不仅仅为
0.5
工作:

# Example 11->16 step 0.5
s = 11
e = 16
step = 0.5
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]

# Example 0->1 step 0.1
s = 0
e = 1
step = 0.1
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

我来到这里是因为我想使用列表理解以0.1的增量创建一个介于-10和10之间的范围。我没有像上面大多数答案那样做一个过于复杂的函数,而是这样做了

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

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

太棒了!正是我要找的!是否还有一种方法可以通过较小的值(如0.5)来增加,而不仅仅是1?因此[11.0,11.5,12.0……16.0]@lorde您可以使用第三个
步长
参数增加1以上,但这仍然是一个int,而不是float。您不能在标准库中完全这样做。@Jared我可以通过在某个时间间隔后删除一些值来创建一个列表。像[1,2,3,5,6,7,9,10,11,13,14,15,17,18,19]对于Python 2 .x和3.x的描述是好的。如果你在NUMPY不需要的情况下工作,考虑(x=11,y=17,和步骤=0.5):Ai范围= [x] + [x+(步骤*i)i i在范围(int((x))/步骤)]只是一个小的NITCOPY。在第一个代码块中,您使用
list
作为变量。在python中
list
是一个内置类,因此它作为变量的用法有点不鼓励DX*递增,但2*startvalue是什么意思,为什么?请你解释一下好吗?这假设你的步骤是积极的。@Michael,说得好。我已经更新了代码,所以现在你可以有消极的步骤:)@tgikal,没错。但是,如果您不知道将为函数的参数指定哪些值,并且需要排序返回,该怎么办?我看不出您的自定义函数有任何使用内置范围函数无法实现的附加功能,我想举一个改进的例子会很好,由于您当前的示例基本上是
i_min=-3,i_max=1
any_number_range(i_max,i_min))
返回
[-3,-2,-1,0,1]
但是,内置的
列表(range(i_min,i_max+1))
将返回相同的值。当序列减少
列表(range(range(1,-3,-1))
时,尝试使用负步长(custom_range(10,3,1))返回空列表。事实上,就像
[x代表范围内的x(10,3,1)]
-第一个参数是开始,第二个参数是结束,最后一个参数是步骤。===>stop>start如果使用
range()
则无需使用列表comprehension@BillalBegueradj在Python3中,range()返回一个类似生成器的对象,而不是列表。它与Python 2中的xrange()基本相同。没错,不需要理解列表。list()内置函数更简单:
list(range(x1,x2+1))
。为什么不使用一行程序呢?
start=2;step=1;end=10;
start=0
end=10
arr=list(range(start,end+1))
output: arr=[0,1,2,3,4,5,6,7,8,9,10]
ar=[]
def diff(start,end):
    if start==end:
        d.append(end)
        return ar
    else:
        ar.append(end)
        return diff(start-1,end) 
np.arange(11, 17, 0.1).tolist()
# [11.0,11.1,11.2,11.299999999999999, ...   16.79999999999998, 16.899999999999977]
# Example 11->16 step 0.5
s = 11
e = 16
step = 0.5
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0]

# Example 0->1 step 0.1
s = 0
e = 1
step = 0.1
my_list = [round(num, 2) for num in np.linspace(s,e,(e-s)*int(1/step)+1).tolist()]
# [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
simple_range = [ x*0.1 for x in range(-100, 100) ]