如果我输入这样的内容,我会得到这些值:
print range(1,10)
[1,2,3,4,5,6,7,8,9]
但是如果我想在for
循环中使用相同的值,那么它将从0开始,这是我的意思的一个例子:
for r in range(1,10):
for c in range(r):
print c,
print ""
输出是这样的:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8
为什么0在这里?不应该从1开始到9结束吗?
答案 0 :(得分:3)
您正在循环中创建第二个 range()
对象。默认起始值为0
。
每次迭代都会在range(r)
上创建一个循环,意味着范围从0到r
,独占,以生成输出数字。对于range(1)
,这意味着您会获得一个仅包含[0]
的列表,而range(1)
则会获得[0, 1]
等等。
如果您想生成从1到r
包含`的范围,只需在实际打印的数字上加1:
for r in range(1,10):
for c in range(r):
print c + 1,
print ""
或范围从1到r + 1
:
for r in range(1,10):
for c in range(1, r + 1):
print c,
print ""
两者都产生您的预期输出:
>>> for r in range(1,10):
... for c in range(r):
... print c + 1,
... print ""
...
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
>>> for r in range(1,10):
... for c in range(1, r + 1):
... print c,
... print ""
...
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
答案 1 :(得分:2)
如果只将一个参数传递给range
函数,它会将其视为结束值(不包括它),从零开始。
如果将两个参数传递给range
函数,它会将第一个值视为起始值,将第二个值视为结束值(不包括它)。
如果将三个参数传递给range
函数,它会将第一个值视为起始值,将第二个值视为结束值(不包括它),将第三个值视为步骤值。
您可以通过此类
进行少量试运行来确认这一点>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Default start value 0
>>> range(5, 10)
[5, 6, 7, 8, 9] # Starts from 5
>>> range(5, 10, 2)
[5, 7, 9] # Starts from 5 & takes only the 2nd element
答案 2 :(得分:2)
不。
for r in range(1,10):
for c in range(r):
print c,
print ""
range()
,当只给出一个参数时,将数字从0打印到参数,不包括参数:
>>> range(6)
[0, 1, 2, 3, 4, 5]
因此,在代码的第三次迭代中,会发生以下情况:
for r in range(1,10): # r is 3
for c in range(r): # range(3) is [0,1,2]
print c, #you then print each of the range(3), giving the output you observe
print ""
答案 3 :(得分:0)
https://docs.python.org/2/library/functions.html#range
来自文档:
参数必须是普通整数。如果省略step参数,则默认为1.如果省略start参数,则默认为0。