Python:为什么这个数组得到';网格宽度';指数的数量?
由于数组索引从0开始,我假设Python:为什么这个数组得到';网格宽度';指数的数量?,python,arrays,indexing,Python,Arrays,Indexing,由于数组索引从0开始,我假设行数组将具有gridwidth+1索引,因为它将计算每个整数,包括gridwidth,但也为0。但是,在检查数组后,它只包含gridwidth索引量。虽然它不会妨碍我的代码,但我很好奇为什么会发生这种情况。您的for循环将迭代gridwidth次,因此您的行将附加gridwidth元素,另外,您可能会注意为for循环提供迭代次数的内置类,该范围将提供介于0和gridwidth-1 另外,range(0,gridwidth)与range(gridwidth)相同rang
行
数组将具有gridwidth+1
索引,因为它将计算每个整数,包括gridwidth
,但也为0。但是,在检查数组后,它只包含gridwidth
索引量。虽然它不会妨碍我的代码,但我很好奇为什么会发生这种情况。您的for
循环将迭代gridwidth
次,因此您的行将附加gridwidth
元素,另外,您可能会注意为for
循环提供迭代次数的内置类,该范围将提供介于0
和gridwidth-1
另外,range(0,gridwidth)
与range(gridwidth)
相同range
的起点默认为0
如果要实现附加到行的gridwidth+1
元素,可以使用:
for i in range(0, gridwidth):
row.append(random.randint(0, 1))
这是因为range
功能在左侧关闭,在右侧打开。这意味着它将包括0
,但不包括gridwidth
。数学符号是[0,gridwidth],因此您的迭代是从0到gridwidth-1使数组包含gridwidth`元素
虽然它不会妨碍我的代码,但我很好奇为什么会发生这种情况
你做了如下假设:
因为它将计算gridwidth之前(包括gridwidth)的每个整数,但也将计算0
你试过验证这个假设吗
for i in range(gridwidth + 1):
row.append(random.randint(0, 1))
请注意,gridwidth
的值未打印
或者您可以尝试阅读文档:
for i in range(0, gridwidth):
print(i)
这种情况之所以发生,是因为range
就是这样定义的
用这种方式定义范围的动机是因为这是程序员所习惯的——因为在旧的语言中,让您在循环中索引到数组(而不是直接获取项目)就是这种方式。如果您真的很好奇,请尝试以下方法:
>>> help(range)
Help on class range in module builtins:
class range(object)
| range(stop) -> range object
| range(start, stop[, step]) -> range object
|
| Return an object that produces a sequence of integers from start (inclusive) | to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.
| start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.
| These are exactly the valid indices for a list of 4 elements.
| When step is given, it specifies the increment (or decrement).
然后,看一下文档
范围r的内容由公式r[i]=start+step*i确定,其中i>=0和r[i]
范围(0,gridwidth)
(范围是一类不可变的iterable对象)将返回一个数字从0到(gridwidth-1)的序列
产出:
for i in range(0, 5):
print(i)
for i in range(0, 5):
print(i)
0
1
2
3
4