2013-08-16 25 views

回答

287

使用range。在Python 2.x中,它返回一个列表,所以你需要的是,

>>> range(11, 17) 
[11, 12, 13, 14, 15, 16] 

在Python 3.x中它是一个迭代器,所以你需要将其转换为一个列表,

>>> list(range(11, 17)) 
[11, 12, 13, 14, 15, 16] 

注意 :第二个数字是排他性所以在这里它需要16+1 = 17

编辑:

为了应对疑问句有关0.5递增最简单的选项重刑可能是使用numpyarange

>>> numpy.arange(11, 17, 0.5) 
array([ 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. , 
     15.5, 16. , 16.5]) 
+1

太棒了!正是我在找什么!是否还有一种方法可以通过比0.5更小的值增加,而不仅仅是1? so [11.0,11.5,12.0 ...... 16.0] – lorde

+1

@lorde您可以使用第三个“step”参数递增1以上,但这仍然是一个int - 不是float。你不能在标准库中完全做到这一点。 – Jared

+0

@Jared我可以通过在某个间隔后删除一些值来制作一个列表。像[1,2,3,5,6,7,9,10,11,13,14,15,17,18,19] – 2016-06-07 09:12:47

11

你似乎在寻找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] 
+0

只是一个小挑逗。在第一个代码块中,您使用'list'作为变量。 –

+1

在python list中是一个内建类,所以它作为变量的用法有点不鼓励 –

+0

x *增量,但是你的意思是2 * startvalue,对于什么?你能解释一下吗? –

3

在Python中使用列表理解。既然你想在列表中也有16个。使用x2 + 1。范围函数不包括函数中的上限。

列表= [X为在范围X(X1,X2 + 1)]

+6

列表理解的要点是什么? – Blender

1

假设你想拥有X的范围为y为3.x的支持

range(x,y+1) 

>>> range(11,17) 
[11, 12, 13, 14, 15, 16] 
>>> 

使用列表

4

尝试:

range(x1,x2+1) 

那是Python 2.x中的一个列表,其行为大部分与Python 3.x中的列表类似。如果你正在运行的Python 3和需要,你可以修改的列表,然后使用:

list(range(x1,x2+1)) 
3

如果您正在寻找范围像功能,适用于float类型,然后在这里是一个非常好的article

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

更新:现在一步可能是负的。感谢@迈克尔的评论。

+0

这假定你的步骤是积极的。 – Michael

+0

@迈克尔,好点。我已经更新了代码,所以现在你可以有负面的步骤:) –

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所表达的,最好的方法是使用rangenumpy.arrange但是我觉得代码很有趣可以共享。

+0

list(custom_range(10,3,1))返回空列表。 –

+0

事实上,像'[x for x in range(10,3,1)]' - 第一个参数是开始,第二个参数是结束和最后一个步骤。 ==>停止>开始 – Michael

相关问题