0

所以让我们说

start = 10
end = 30

现在我需要一个从start到的循环end

我在想这样的事情:

for i in [start..end]
  print i

但这并不完全奏效。有没有一种干净的方法可以做到这一点?

4

6 回答 6

7
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()?

于 2012-07-12T03:45:00.167 回答
2
for i in xrange(start, end + 1):
    print i

如果您使用的是 Python 3,而不是 Python 2.x,请使用rangein代替(如@Levon 建议的那样)。xrange

于 2012-07-12T03:45:33.037 回答
2
for i in xrange(10, 31):
   # something

看看精美的手册,它会为您解释...注意终点是“最多,但不包括” - 它被称为半封闭范围。

也正如其他人在 Python 3.x 中提到的那样 -range()是一个生成器,不会list像在 Python 2.x中那样创建一个。但是,2to3 工具会自动将 an 转换xrangerange语句。

在 2.xrange中生成了一个可以切片等的物理列表...但是在 3.x 中,list(range(1000))如果您希望它实现它在 2.x 中所做的事情,则必须编写。

于 2012-07-12T03:45:58.560 回答
1

您正在寻找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()创建一个可以迭代的数字列表。

于 2012-07-12T03:47:18.067 回答
1

您可以迭代并打印列表的每个元素。尝试以下操作:

for i in range(start,end+1):
print i
于 2012-07-12T03:47:47.893 回答
1

您还可以通过打印从 range 返回的结果列表来打印完整的数字范围:

print(range(start, end+1))
于 2012-07-12T13:15:50.730 回答