首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在这个类中,循环返回的索引是0,而不是0,1,2,3...etc?

在这个类中,循环返回的索引是0,而不是0,1,2,3...等的原因是因为在计算机编程中,索引通常是从0开始的。这是由于计算机内存的存储方式以及数据结构的设计所决定的。

在大多数编程语言中,数组、列表、字符串等数据结构的索引都是从0开始的。这是因为计算机内存中的数据是以连续的字节存储的,而索引实际上是指向内存中某个位置的指针。通过将索引从0开始,可以更方便地计算元素在内存中的位置,提高访问效率。

另外,从历史的角度来看,早期的编程语言如C语言就是从0开始计数的,后来的许多编程语言也沿用了这个习惯。因此,大部分开发者习惯于从0开始计数索引。

虽然索引从0开始可能会让一些初学者感到困惑,但习惯之后会发现这种方式更加直观和方便。在编写循环等代码时,使用0作为起始索引可以简化逻辑,减少出错的可能性。

总结起来,循环返回的索引是0,而不是0,1,2,3...等是因为计算机编程中索引通常从0开始计数,这样可以更方便地访问内存中的数据,并且符合编程语言的设计习惯。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解for循环的运行机制

从这里我们知道,在进行 for循环的时候,其实是将被循环的对象转换为了可迭代对象——注意这个转换,非常重要。转换了之后,for循环是怎么运行的?在书中并没有深入讲解,下面我们就此给予介绍。...,对于前面的示例,将列表lst=[0,1,2,3]作为for循环语句中的expression_list,即将其转化为可迭代对象,并且只转化一次,不妨用iter_lst表示这个可迭代对象。...这说明,如果将列表lst转换为可迭代对象之后,这个可迭代对象中的元素是对lst中元素的引用,并不是在可迭代对象中建立一套新的对象。 理解了上面的道理,看下面的操作,是不是能够解释?...>>> a[1] = next(iter_a) >>> a ['python', 'c', 'c', 'rust'] 继续读取可迭代对象的第三个元素'c',在赋值给a[1],也就是列表a中的索引是1的元素变成了...a[1]就如同前面演示的i那样,都是循环语法结构中的target_list,只不过这里出了要完成赋值之外,还要同时实现对列表a中索引是1的元素修改,即实现上面分解动作中a[1] = next(iter_a

1.4K20
  • 【深入vue】为什么Vue3.0不再使用defineProperty实现数据监听?(修订版)

    这种说法是有问题的,事实上,Object.defineProperty 本身是可以监控到数组下标的变化的,只是在 Vue 的实现中,从性能/体验的性价比考虑,放弃了这个特性。...unshift 操作会导致原来索引为0,1,2,3的值发生变化,这就需要将原来索引为0,1,2,3的值取出来,然后重新赋值,所以取值的过程触发了 getter ,赋值时触发了 setter 。...vue的 Observer 类定义在 core/observer/index.js 中 ? 可以看到,vue的 Observer 对数组做了单独的处理。 ?...arrayMethods 是对数组的方法进行重写,定义在 core/observer/array.js 中, 下面是这部分源码的分析。...Object.defineProperty 对数组和对象的表现一直,并非不能监控数组下标的变化,vue2.x中无法通过数组索引来实现响应式数据的自动更新是vue本身的设计导致的,不是 defineProperty

    2.5K40

    你需要的react面试高频考察点总结

    为什么列表循环渲染的key最好不要用index举例说明变化前数组的值是[1,2,3,4],key就是对应的下标:0,1,2,3变化后数组的值是[4,3,2,1],key对应的下标也是:0,1,2,3那么...=id0的值也是1因为子元素相同,就不删除并更新,只做移动操作,这就提升了性能什么是高阶组件高阶组件不是组件,是 增强函数,可以输入一个元组件,返回出一个新的增强组件属性代理 (Props Proxy)...useState 要使用数组而不是对象useState 的用法:const [count, setCount] = useState(0)可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢...总结:useState 返回的是 array 而不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,而返回对象的话要想使用多次就需要定义别名了。... )};在集合中添加和删除项目时,不使用键或将索引用作键会导致奇怪的行为。

    3.6K30

    在循环内使用闭包(Closures)

    闭包的本质是一个内部函数访问其作用域之外的变量。闭包可以用于实现诸如 私有变量 和 创建工厂函数之类的东西。...1000); } 运行上面的代码控制台会在1秒后打印4个4,而不是0,1,2,3。...其原因是因为setTimeout函数创建了一个可以访问其外部作用域的函数(也就是我们经常说的闭包),每个循环都包含了索引i。...1秒后,该函数被执行并且打印出i的值,其在循环结束时为4,因为它的循环周期经历了0,1,2,3,4,并且循环最终在4时停止。...下面列举两种方案解决这个问题: for (var i = 0; i < 4; i++) { // 通过传递变量 i // 在每个函数中都可以获取到正确的索引 setTimeout(function

    1.2K31

    Python学习笔记整理(十一)pyth

    =0:continue ...     print x, ... 8 6 4 2 0 这个例子中,如果是奇数就返回循环顶部,不会打印.是偶数就打印。...这个变量名没有什么特别的,甚至可以在循环主体中修改。但是当控制权再次回到循环顶端时,就会自动被设成序列的下一个元素。...可迭代对象:如果对象是实际保存的序列,或者可以在迭代工具环境中(如for循环)一次产生一个对象的结果,就被看作是可迭代。 总之,可迭代对象包括实际序列和按照需求而计算的虚拟序列。...generated deltas -- # Tue Feb 14 10:08:27 2012\n' 两者的区别在于,达到文件末尾时,next是引发内置的StopIteration异常,而不是返回空字符串...Python提供了两个内置函数,在for循环内定制迭代: * 内置range函数返回连续整数列表,可作为for中的索引。

    98240

    浅谈 JavaScript 数据双向绑定

    这种说法是有问题的,事实上,Object.defineProperty 本身是可以监控到数组下标的变化的,只是在 Vue 的实现中,从性能/体验的性价比考虑,放弃了这个特性。...unshift 操作会导致原来索引为 0,1,2,3 的值发生变化,这就需要将原来索引为 0,1,2,3 的值取出来,然后重新赋值,所以取值的过程触发了 getter ,赋值时触发了 setter 。...Object.defineProperty 在数组中的表现和在对象中的表现是一致的,数组的索引就可以看做是对象中的 key。...Vue 对数组的 observe 做了哪些处理 Vue 的 Observer 类定义在 core/observer/index.js 中。...总结 Object.defineProperty 对数组和对象的表现一致,并非不能监控数组下标的变化,Vue2 中无法通过数组索引来实现响应式数据的自动更新是 Vue 本身的设计导致的,不是 defineProperty

    40710

    Python使用pandas读取excel表格数据

    格式: 直接print(df)得到的结果: 对比结果和表格,很显然表格中的第一行(黄色高亮部分)被定义为数据块的列下标,而实际视作数据的是后四行(蓝色高亮部分);并且自动在表格第一列之前加了一个行索引...{0,1,2,3}。...用df.ix[i,j]读取数据并复制入二维数组中,其中for i in range(0,height)循环表示从下标0到下标height-1(不包含height),得到的输出如下: 对代码做一些补充说明...不过为了不在使用时产生混乱,我个人建议还是使用loc或者iloc而不是ix为好。...在表格中自定义行列索引的情况 如果表格是下面这样的形式: 想要让读取得到的DataFrame行索引为{‘one’,‘two’,‘three’,‘four’},列索引为{‘一’,‘二’,‘三’,

    3.2K10

    工程师应该学点算法——图论2

    为什么QQ要给女朋友推送前女友?这还是从图的算法说起。前篇 -> 图论1 图的遍历 在图的遍历中我们一定要掌握两种最基础的算法:深度优先 和 广度优先。...深度优先遍历(DFS) 这种遍历算法可以想象成在玩迷宫,我们选择一个方向走到底,直至不能走了然后再返回一步继续尝试其他的方向,在代码中就是递归+回溯,这就是 深度优先遍历。...如上图有两个数组,左边用一个数组记录了遍历的路径,索引是节点,值是父节点位置,右边的数组记录了是否已经标记过,T 代表是,f 代表否。 没看懂?没关系,我一步一步的写出来, 举例如下: ?...方法是每遍历一个点,优先把他的所有子节点加入到队尾,再从队头取出一个点出来,这样可以保证优先遍历同层, 直至队列为空 走过的点依然要标记,防止死循环。 如下图,从0开始遍历。 ?...如下表所示,我先将1入队列 队列 入队列节点 出队列节点 已经标记的节点 [o] 1,2,3 0 0,1,2,3 [1,2,3] 没有(这里没有入队列,因为2,3是已经标记的节点) 1 0,1,2,3

    41920

    $.each()与$(selector).each()区别详解

    1,2,0,1,2,0,1,2  alert(val)将输出为a,aa,aaa,b,bb,bbb,c,cc,ccc  each处理json数据,这个each就有更厉害了,能循环每一个属性     ...== false; value = object[++i]) {} /*object[0]取得jQuery对象中的第一个DOM元素,通过for循环, 得到遍历整个jQuery对象中对应的每个DOM...在fn的实现中,可以直接采用this指针引用数组或是对象的子元素。...当each方法提供了arg参数时,fn函数调用传入的参数为arg,否则为:子元素索引,子元素本身 2.obj 对象不是数组 该方法同1的最大区别是:fn方法会被逐次不考虑返回值的进行进行。...换句话说,obj对象的所有属性都会被fn方法进行调用,即使fn函数返回false。调用传入的参数同1类似。

    1.9K120

    图解pandas模块21个常用操作

    如果没有传递索引值,那么默认的索引将是范围(n),其中n是数组长度,即[0,1,2,3…. range(len(array))-1] - 1]。 ?...3、从字典创建一个系列 字典(dict)可以作为输入传递,如果没有指定索引,则按排序顺序取得字典键以构造索引。如果传递了索引,索引中与标签对应的数据中的值将被拉出。 ?...7、从列表创建DataFrame 从列表中很方便的创建一个DataFrame,默认行列索引从0开始。 ?...20、更改列名(columns index) 更改列名我认为pandas并不是很方便,但我也没有想到一个好的方案。 ?...21、apply函数 这是pandas的一个强大的函数,可以针对每一个记录进行单值运算而不需要像其他语言一样循环处理。 ? ? 整理这个pandas可视化资料不易

    9K22

    快速学习-Python基本数据类型

    Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 Python中的字符串不能改变。...列表是写在方括号[]之间、用逗号分隔开的元素列表。和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。...和字符串一样,list可以被索引和切片。 List可以使用+操作符进行拼接。 List中的元素是可以改变的。...可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。...列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    84530

    前端系列 |原生JS和jQuery循环遍历函数

    ,新数组中的元素是通过检查指定数组中符合条件的所有元素。...,也可以循环遍历对象 (1)遍历数组 var arr = [2,4,6,1]; for(var x in arr){ console.log(x); //数组索引 结果为:0,1,2,3 console.log...; //当前元素索引 console.log(item); //当前元素 }) 2.map() 用于使用指定函数处理数组中的每个元素(或对象的每个属性),并将处理结果封装为新的数组返回。...(arr1); //结果为:["z"] 4.inArray() 函数用于在数组中查找指定值,并返回它的索引值(如果没有找到,则返回-1) 提示:源数组不会受到影响,过滤结果只反映在返回的结果数组中。...var result = $("div").filter(".cls"); //返回类名是cls的div元素 console.log(result); //结果为:类名为cls的div元素

    6.7K20

    Backtrader来啦:数据篇

    2、能否以及如何自定义导入的数据集结构? 3、为什么 self.datas[0].datetime.date(0) 返回的就是当前回测时刻? 4、self.datas 的结构是怎样的?...在这个集合中,数据表格是按照导入的顺序依次确定索引位置,第一个导入的数据表格的索引位置为 0 ,之后的依次递增,如下图所示: ?...带中括号的常规方式 → self.datas[X]; b. 不带中括号的缩写方式 → self.dataX(data后面没有 s),其中 X 对应索引位置编号 0,1,2,3,......默认情况下是取当前最新时点(ago=0)的那一个数据(size=1); 3、在编写策略时,上面提到的对数据点的索引切片操作一般在 next() 函数中涉及较多,而 __init__() 中涉及较少,...获取 line 长度: 1、self.data0.buflen() 返回整条线的总长度,固定不变; 2、在 next() 中调用 len(self.data0),返回的是当前已处理(已回测)的数据长度

    3.9K44
    领券