精华内容
下载资源
问答
  • 为什么数组下标从0开始
    千次阅读
    2020-12-23 21:58:52

    背景

    有很多编程语言的数组都是从 0 开始编号,你是否下意识地想过,为什么数组要从 0 开始编号,而不是从 1 开始呢? 从 1 开始不是更符合人类的思维习惯吗?那先看下数组的定义。 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    为了更快寻址

    计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址:

    a[i]_address = base_address + i * data_type_size

    如果下标从 1 开始,公式就变成

    a[i]_address = base_address + (i-1)*type_size

    对比两个公式,可知从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说,就是多了一次减法指令。 数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。

    历史原因

    上面解释得再多其实都算不上压倒性的证明,说数组起始编号非 0 开始不可。所以我觉得最主要的原因可能是历史原因。C 语言设计者用 0 开始计数数组下标,之后的 Java、JavaScript 等高级语言都效仿了 C 语言,或者说,为了在一定程度上减少 C 语言程序员学习 Java 的学习成本,因此继续沿用了从 0 开始计数的习惯。实际上,很多语言中数组也并不是从 0 开始计数的,比如 Matlab。甚至还有一些语言支持负数下标,比如 Python。

    更多相关内容
  • 主要介绍了python如何获取列表中每个元素下标位置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 最近遇到一个问题,在循环商品列表时,因为数组的第一个是商品的品牌介绍,所以循环时不能直接循环,只能第二个元素开始。   方案1数据源头更改,后端直接在列表里去除第一个数组元素。但前端还是需要在别的...
  • 题目:给一个列表,找元素在此列表中的位置,如果找到,返回此元素下标,如果找不到,那就直接返回空 解决方法1: # _*_ coding:UTF-8 _*_ def find(list,a): for i in range(0,len(list)): if list[i]==a: ...
  • 文章目录列表下标为什么开始为什么列表append比insert快列表append之后,id值为什么不变,也可以说内存地址不变 列表下标为什么开始 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体...

    列表的下标为什么从零开始

    在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。

    对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际 应用中的某种有意义的信息,或者表示数据之间的某种关系。

    这样的一组序列元素的组织形式,我们可以将其抽象为线性表。一个线性表是某类元素的一个集合,还记录着元 素之间的一种顺序关系。线性表是最基本的数据结构之一,在实际程序中应用非常广泛,它还经常被用作更复杂 的数据结构的实现基础。

    根据线性表的实际存储方式,分为两种实现模型:

    • 顺序表:将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。
    • 链表:将元素存放在通过链接构造起来的一系列存储块中。

    而在顺序表中,以存储的数据类型角度来看则又有序列表和元素外置顺序表

    **加粗样式**![
    图a表示的是顺序表的基本形式,数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标 是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i 个元素)与存储单元大小(c)的乘积计算而得,即:
    Loc(ei) = Loc(e0) + c*i
    故,访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。 如果元素的大小不统一,则须采用图b的元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保 存对应元素的地址信息(即链接)。由于每个链接所需的存储量相同,通过上述公式,可以计算出元素链接的存 储位置,而后顺着链接找到实际存储的数据元素。注意,图b中的c不再是数据元素的大小,而是存储一个链接地 址所需的存储量,这个量通常很小。 图b这样的顺序表也被称为对实际数据的索引,这是最简单的索引结构。

    数组要从0开始编号,而不是从1开始呢? 从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移(offset)”。前面也讲到,如果用 a 来表 示数组的首地址,a[0] 就是偏移为 0 的位置,也就是首地址,a[k] 就表示偏移 k 个 type_size 的位置,
    所以计算 a[k] 的内存地址只需要用这个公式:
    a[k]_address = base_address + k * type_size
    但是,如果数组从 1 开始计数,那我们计算数组元素 a[k] 的内存地址就会变为:
    a[k]_address = base_address + (k-1)*type_size
    对比两个公式,我们不难发现,从 1 开始编号,每次随机访问数组元素都多了一次减法运算,对于 CPU 来说, 就是多了一次减法指令。数组作为非常基础的数据结构,通过下标随机访问数组元素又是其非常基础的编程操 作,效率的优化就要尽可能做到极致。所以为了减少一次减法操作,数组选择了从 0 开始编号,而不是从 1 开始。

    展开全文
  • 主要介绍了python列表返回重复数据的下标,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 您可能感兴趣的文章:在Python中,不用while和for循环遍历列表的实例python实现在遍历列表时,直接对dict元素增加字段的方法Python 遍历列表里面序号和值的方法(三种)Python递归遍历列表及输出的实现方法python通过...
  • 主要介绍了使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • JS:findIndex查找列表元素下标

    千次阅读 2020-11-06 19:36:25
    const list = ["a", "b", "c"]; let index = list.findIndex((x) => x == "b"); console.log(index); // 1

    通过自定义函数查找元素下标,元素数据结构不一样就需要写多次

    
    function findIndex(list, item) {
      for (let i in list) {
        if (list[i] == item) {
          return i;
        }
      }
    
      // 没有找到元素返回-1
      return -1;
    }
    
    const list = ["a", "b", "c"];
    let item = "b";
    
    let index = findIndex(list, item);
    console.log(index); // 1
    
    

    使用findIndex查找列表元素下标

    const list = ["a", "b", "c"];
    
    let index = list.findIndex((x) => x == "b");
    
    console.log(index); // 1
    
    
    展开全文
  • python获取列表中指定元素下标

    千次阅读 2021-03-31 21:45:31
    python中列表元素虽然有下标,但是有时候需要特定的用途,查找指定的特殊值的元素的下标。 这时候可以用for循环,打印出来下标,但是每次都要写for循环,感觉还是有点麻烦。 比如这样 使用enumerate,枚举列表中...

    python中列表元素虽然有下标,但是有时候需要特定的用途,查找指定的特殊值的元素的下标。

    这时候可以用for循环,打印出来下标,但是每次都要写for循环,感觉还是有点麻烦。

    比如这样

    使用enumerate,枚举列表中的元素,

    a = [1, 2, 8, None, 'test']
    for i in range(len(a)):
        if a[i] == None:
            print(i)
    
    for i in range(len(a)):
        if isinstance(a[i], str):
            print(i)
    
    null_list = [i for i, x in enumerate(a) if x==None]
    null_list
    str_list = [i for i, x in enumerate(a) if isinstance(x, str)]
    str_list

     可以得到结果如下:

     

    相当于enumerate多了一个索引元素。

    当然也可以使用index。但是前提是index需要元素的具体值,当我们不知道元素的具体值时,就没办法。比如第四个元素'test",我们只知道是一个文本。

    无法判断,不知道具体是什么文本。

     

    展开全文
  • jQuery中直接通过$(this).index()即可得到当前元素下标。下面通过实例给大家介绍JavaScript 获取元素在父节点中的下标,需要的朋友参考下吧
  • 1、创建数组 代码如下: var array = new Array(); var array = new Array(size);//指定数组的长度 var array = new Array(item1,item2……itemN);//创建数组并赋值 2、取值、赋值 代码如下: var item = array...
  • 使用下标能修改列表元素

    千次阅读 2020-12-09 03:20:53
    【单选题】下列选项中,正确定义了一个字典的是() (3.0分)【填空题】在列表中查找元素时可以使用____和in运算符 (5.0分)【填空题】元祖使用____存放元素,列表使用的方括号 (5.0分)【判断题】在字典中,可以使用count...
  • 今天小编就为大家分享一篇Python 查找list中的某个元素的所有的下标方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 当我们想从列表中获得某个元素的索引时,通常index()函数可以实现,但当列表中存在多个相同的值的时候,index()函数只能获得列表中第一个该值的索引。 为了能够获得该值的所有索引值,就需要借助enumerate()函数 ...
  • python获取列表list里面元素下标

    万次阅读 多人点赞 2019-11-01 10:06:27
    方法1列表.index(target) 其中,target就是你需要查找的特定元素。 举例: target_list = [35, 67, 6, 77, 89, 98] print(target_list.index(89)) 输出结果: 4 缺点:这种方法只能得到第一个匹配...
  • Vue列表循环指定下标开始

    千次阅读 2020-10-22 13:53:32
    <el-radio-group v-model="value">...el-radio v-for="item in itemBankType.slice(1)" :label="item.value" :value="item.value">{{item.label}}</el-radio> </el-radio-group>
  • python 循环列表 带出元素下标

    千次阅读 2021-04-30 08:47:47
    在使用 for 循环迭代一个列表时,有时我们需要获取列表中每个元素所在的下标位置是多少,例如 numbers = [10, 29, 30, 41],要求输出 (0, 10),(1, 29),(2, 30),(3, 41) 这道题的实现方式主要有两种方式,第一种...
  • 0开始的Python学习003序列

    千次阅读 2020-12-24 12:33:36
    sequence 序列序列是一组有顺序数据的集合。不知道怎么说明更贴切,因为python的创建变量是不用定义类型,所以在序列中(因为有序我先把它看作是一个有序数组)的元素也不会被类型限制。...a1 = (1,2,3,...
  • python List列表查找相同元素下标位置

    千次阅读 2020-12-04 07:34:33
    list_position_name= ['网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '网络工程师', '会计', '房产经纪', '美发师', '质量管理...
  • 题目对于列表 ["foo", "bar", "baz"]和在列表中的元素"bar",如何得到它的下标(1)回答一>>> ["foo", "bar", "baz"].index("bar")1注意事项注意虽然这可能是对所问问题最简单的回答方法,index在list中支持...
  • 输入一个整数列表,找出整数列表中最大元素下标,如果最大元素的个数超过1,那么请打印输出所有的下标。 输入样例: 3,2,3 输出样例: 0 2 x=list(map(int,input().split(","))) //输入数据以逗号隔开,...
  • 数组下标索引为什么0开始

    千次阅读 2020-08-17 21:26:17
    也不是所有的高级程序语言都是如此,比如Python数组下标就...(1下标从0开始: 数组寻址——arr[i] = base_address + i * type_size 其中base_address为数组arr首地址,arr[0]就是偏移量为0的数组,即数组arr首地.
  • 参考文章:python 获取list特定元素下标的实例讲解
  • 这个是没法直接修改语言内置规则的,即下标不可能0开始,估计你是C语言改写,可以采用变通的方法。以二维数组为例,定义A为mxn的矩阵,matlab默认的数组下标为行1~m ,列1~n你所谓的下标定义为0,可以引入临时变...
  • Python3 如何同时迭代列表元素下标

    千次阅读 2019-08-28 11:52:26
    众所周知 Python 中的 index 方法...同时获取的话我们可以自己使用 for 循环配合 index,不过 Python 提供了一个内置函数 enumerate,可以同时获取到元素下标 In [13]: data = [1, 2, 3] In [14]: for k, v in ...
  • (12-14题共用题干)儿日龄3天,长度串中足月顺产,长度串中生后第2天出现黄疸,渐加重伴不吃、不哭、不动,查体:重度黄染,精神萎靡,心肺检查无明显异常,肝肋下2.5cm,脾肋下1cm,脐部少许脓性分泌物。初步考虑最...
  • 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面方法一:利用数组自身的特性 a.index(target), 其中a是你的目标list,target是你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 180,679
精华内容 72,271
关键字:

列表元素下标从1开始吗