Answers:
使用range
。在Python 2.x中,它返回一个列表,因此您需要做的是:
>>> range(11, 17)
[11, 12, 13, 14, 15, 16]
在Python 3.x中range
是迭代器。因此,您需要将其转换为列表:
>>> list(range(11, 17))
[11, 12, 13, 14, 15, 16]
注意:第二个数字是唯一的。因此,这里需要为16+1
=17
编辑:
要回答有关增加by的问题0.5
,最简单的选择可能是使用numpy arange()
和.tolist()
:
>>> import numpy as 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]
step
参数将值增加1以上,但这仍然是int -不是float。您不能在标准库中完全做到这一点。
您似乎在寻找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]
list
用作变量。
list
是一个内置类,因此不鼓励将其作为变量使用
如果您正在寻找适用于浮点类型的范围之类的函数,那么这是一篇非常不错的文章。
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]
在python中使用列表理解。由于您也希望列表中有16个。使用x2 + 1。范围功能不包括该功能的上限。
list = [x表示x在范围(x1,x2 + 1)中]
range()
不需要使用列表理解功能
list(range(x1, x2+1))
。
在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]
最优雅的方法是使用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.arrange
不过,我觉得要共享的代码有趣。
[x for x in range(10, 3, 1)]
-第一个参数是开始,第二个参数是结束,最后一个步骤。==>停止>开始
上面的每个答案都假定范围仅是正数。这是返回连续数字列表的解决方案,其中参数可以是任意值(正数或负数),并且可以设置可选的步长值(默认值= 1)。
def any_number_range(a,b,s=1):
""" Generate consecutive values list between two numbers with optional step (default=1)."""
if (a == b):
return a
else:
mx = max(a,b)
mn = min(a,b)
result = []
# inclusive upper limit. If not needed, delete '+1' in the line below
while(mn < mx + 1):
# if step is positive we go from min to max
if s > 0:
result.append(mn)
mn += s
# if step is negative we go from max to min
if s < 0:
result.append(mx)
mx += s
return result
例如,标准命令list(range(1,-3))
返回空列表[]
,而此函数将返回[-3,-2,-1,0,1]
更新:现在步骤可能为负。感谢@Michael的评论。
i_min = -3, i_max = 1
any_number_range(i_max, i_min))
返回的,[-3,-2,-1,0,1]
但是内置list(range(i_min, i_max + 1))
将返回相同的值。
list(range(1,-3, -1))