Python:为什么这个数组得到';网格宽度';指数的数量?

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

由于数组索引从0开始,我假设
数组将具有
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