所以让我们说
start = 10
end = 30
现在我需要一个从start
到的循环end
我在想这样的事情:
for i in [start..end]
print i
但这并不完全奏效。有没有一种干净的方法可以做到这一点?
所以让我们说
start = 10
end = 30
现在我需要一个从start
到的循环end
我在想这样的事情:
for i in [start..end]
print i
但这并不完全奏效。有没有一种干净的方法可以做到这一点?
for i in range(start, end+1):
print i
将为您提供从 10 到 30 的输出。
注意:我添加+1
到您的end
值的原因是因为range()函数指定了一个半闭区间。这意味着包含第一个值,但不包含最终值。
IE,
range(5, 10)
会给你一份清单
5, 6, 7, 8, 9
但不包括 10。
您还可以为range()和许多其他内容指定步长,请参阅文档。
最后,如果您使用的是 Python 2.x,您也可以使用xrange()代替range()
,尽管在 Python 3.x 中您只会拥有range()
这就是我在这里使用它的原因。
range()
如果您对and之间的区别感到好奇xrange()
(尽管它与您的问题并不直接相关),那么以下两个 SO 问题是一个很好的起点:Python 2.X 中 range 和 xrange 函数之间的区别是什么?并且您是否应该始终偏爱 xrange() 而不是 range()?
for i in xrange(start, end + 1):
print i
如果您使用的是 Python 3,而不是 Python 2.x,请使用range
in代替(如@Levon 建议的那样)。xrange
for i in xrange(10, 31):
# something
看看精美的手册,它会为您解释...注意终点是“最多,但不包括” - 它被称为半封闭范围。
也正如其他人在 Python 3.x 中提到的那样 -range()
是一个生成器,不会list
像在 Python 2.x中那样创建一个。但是,2to3 工具会自动将 an 转换xrange
为range
语句。
在 2.xrange
中生成了一个可以切片等的物理列表...但是在 3.x 中,list(range(1000))
如果您希望它实现它在 2.x 中所做的事情,则必须编写。
您正在寻找range()
range(start,end) #end not inclusive
range(end) # starts with 0,end not inclusive
range(start, end, step) #increments of step, default = 1
例如,
for i in range(100,150):
print i
注意: Py3k+ 只有 range(),之前的版本有xrange()
和range()
,两者都相似,除了xrange()
是一个生成器,而range()
创建一个可以迭代的数字列表。
您可以迭代并打印列表的每个元素。尝试以下操作:
for i in range(start,end+1):
print i
您还可以通过打印从 range 返回的结果列表来打印完整的数字范围:
print(range(start, end+1))