我将如何创建一个列表,其中包含2个值之间的值? 例如,对于价值产生11和16之间以下列表:Python - 使用2个值之间的数字创建列表?
list = [11, 12, 13, 14, 15, 16]
我将如何创建一个列表,其中包含2个值之间的值? 例如,对于价值产生11和16之间以下列表:Python - 使用2个值之间的数字创建列表?
list = [11, 12, 13, 14, 15, 16]
使用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
递增最简单的选项重刑可能是使用numpy
的arange
,
>>> 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])
你似乎在寻找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'作为变量。 –
在python list中是一个内建类,所以它作为变量的用法有点不鼓励 –
x *增量,但是你的意思是2 * startvalue,对于什么?你能解释一下吗? –
在Python中使用列表理解。既然你想在列表中也有16个。使用x2 + 1。范围函数不包括函数中的上限。
列表= [X为在范围X(X1,X2 + 1)]
列表理解的要点是什么? – Blender
假设你想拥有X的范围为y为3.x的支持
range(x,y+1)
>>> range(11,17)
[11, 12, 13, 14, 15, 16]
>>>
使用列表
尝试:
range(x1,x2+1)
那是Python 2.x中的一个列表,其行为大部分与Python 3.x中的列表类似。如果你正在运行的Python 3和需要,你可以修改的列表,然后使用:
list(range(x1,x2+1))
如果您正在寻找范围像功能,适用于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)。
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
@迈克尔,好点。我已经更新了代码,所以现在你可以有负面的步骤:) –
最优雅的方式做,这是由但是使用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
但是我觉得代码很有趣可以共享。
list(custom_range(10,3,1))返回空列表。 –
事实上,像'[x for x in range(10,3,1)]' - 第一个参数是开始,第二个参数是结束和最后一个步骤。 ==>停止>开始 – Michael
太棒了!正是我在找什么!是否还有一种方法可以通过比0.5更小的值增加,而不仅仅是1? so [11.0,11.5,12.0 ...... 16.0] – lorde
@lorde您可以使用第三个“step”参数递增1以上,但这仍然是一个int - 不是float。你不能在标准库中完全做到这一点。 – Jared
@Jared我可以通过在某个间隔后删除一些值来制作一个列表。像[1,2,3,5,6,7,9,10,11,13,14,15,17,18,19] – 2016-06-07 09:12:47