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

为什么值4在从数组中删除后仍会打印出来

在从数组中删除元素后仍然打印出来的原因是因为数组的索引是从0开始的。当我们删除数组中的一个元素时,实际上是将该元素后面的所有元素向前移动一个位置,覆盖被删除的元素。但是,数组的长度并没有改变,最后一个位置仍然存在,只是它的值变成了原数组中倒数第二个元素的值。

具体来说,如果数组中有n个元素,索引范围是从0到n-1。当我们删除索引为i的元素时,索引为i+1到n-1的元素都会向前移动一个位置,填补被删除元素的位置。最后一个位置的元素并没有被移动,它仍然存在于数组中。

所以,当我们遍历数组并打印元素时,最后一个位置的元素仍然会被输出,即使它实际上是被删除的元素。

这个问题可以通过在打印元素之前检查索引是否超出数组长度来解决。如果索引超出了数组长度,就不打印该元素。

以下是一个示例代码,演示了如何在删除元素后避免打印最后一个位置的元素:

代码语言:python
代码运行次数:0
复制
arr = [1, 2, 3, 4, 5]
n = len(arr)

# 删除索引为2的元素
del arr[2]

# 遍历数组并打印元素
for i in range(n-1):
    if i < len(arr):
        print(arr[i])

在这个示例中,我们使用del关键字删除了索引为2的元素(值为3)。然后,我们使用一个循环遍历数组并打印元素。在每次迭代中,我们检查索引是否小于数组的长度,如果是,则打印该元素。

这样,即使删除了元素,我们也可以避免打印最后一个位置的元素。

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

相关·内容

Android-Gson小总

打印 打印结果: ? 总结,就是通过new JSONObject和JSONArray对象,让put()进去即可。 我们看一看google推荐的gson是如何存储json数据的: ? ?...如果value为null,仍会保留该键 本人最近发现在高版本的gson已经没有JsonObject了(比如2.8.5),但是有JsonReader可以继续解析,不知道是不是不推荐了,这里就不跟大家详聊了...说完了区别,我们来说一说常见的Gson与各种类型的转化  一:生成json 这个我们之前代码已经体现出来了: ?...打印: ? 数据结构: ? 如果我们JsonObject对象包含的key都叫name的话,我们就只会有一个name = "王五"的。只会保留最后一个。 二:json和数组之间的转化。 ? ?...总结:其实就是gson.fromJson()和toJson()的调用 三:Json数组和List之间的转化 ? 打印: ?

96530

50道JavaScript详解面试题,你需要了解一下

4、Line1和Line2的控制台输出是什么? 在Line1,我们有两个相互比较的对象,并且它们都是唯一的,因此它将在控制台上记录为False。...因为set和get的Object是内存两个不同的空对象,因此getter不会返回。 23、控制台输出是什么,为什么?...但是,可以在JavaScript通过在未将所有可能的参数都传递给函数时返回不同的输出来执行重载。 29、return语句在数组的forEach循环中做什么?...47、控制台输出是什么,为什么? 它返回h,因为数组在JavaScript是从零开始的,因此arr [2] [1]将可以访问外部数组的第3个元素和内部数组的第2个元素,从而得出“ h”。...它们都将对存储在Web浏览器,但是sessionStorage在浏览器关闭后会删除存储的。 49、!运算符返回一个布尔。真的吗?

3.5K40
  • DS:顺序表的实现

    ,一开始不确定大小,程序员可以根据过程的需求去合理开辟 int capacity;//空间容量,假设我们扩容了,用其记录扩容动态数组的大小。...但是在子程序(非main函数),return 不会执行这些操作,而 exit() 仍会执行。...其实都是可以的(可以仔细看看上面所有接口,比如将int换成float是否通用),打印函数是不可以的,因为这个函数本身的存在意义就是为了方便我们当每次封装完一个接口的时候,可以通过main函数去调用,并使用打印函数打印出来...综上,希望友友们可以利用这个打印函数,每写完一个功能的函数就自己去调用检测一下,如果有问题就自己去调试,相比直接抄,会有很大收获的!!下面我会把所有代码都写出来方便友友们复制!!...,一开始不确定大小,程序员可以根据过程的需求去合理开辟 int capacity;//空间容量,假设我们扩容了,用其记录扩容动态数组的大小。

    10110

    理解原型与原型链

    在软件设计模式,有一种模式叫做原型模式,JavaScript正是利用这种模式而被创建出来。先来了解下原型模式的概念:原型模式是用于创建重复的对象,同时又能保证性能。...__proto__),控制台打印的结果是function(){},为什么Person的原型是function呢?这是因为Person是一个构造函数,它的本质就是一个函数。...for(var key in c){ console.log(c[key]) } //会在控制台中依次打印4 3 1 2 注意在控制台中打印的顺序是 4 3 1 2,而不是 1 2 3 4...C对象只有一个d属性,执行for...in时先返回C.d,然后在从C的原型(B)查找到并返回B.c,再从B的原型(A)查找到并返回A.a和A.b,最后从A的原型(Object)查找,发现Object...getOwnPropertyNames 函数: getOwnPropertyNames 函数可以获取对象所有的自身属性,返回是由对象自身属性名称组成的数组,同样不会向上查找对象原型链。

    55920

    java的排序除了冒泡以来, 再给出一种方法, 举例说明

    9.5 排序:   有一种排序的方法,非常好理解,详见本题的步骤,先找出最大和最小,把最小打印出来,把它存在另一个数组b当中,再删除此最小,之后再来一次找出最小打印出最小以后,再把它存在另一个数组...b当中,再删除此最小,这样循环往复,直到做完,你就会发觉,你已经把排了序数放在b数组当中了,而这里的彻底删除最小的方法就是用比最大还大一的数来取代最小。...(自己想想为什么?)参考后面的答案你会发觉,按照下面的四步,你已经把一个数组排序了。...//用这个全局变量来记录最小数的位置索引,     public static void main(String[] args) {         int[] a = {6, 12, 7, 23, 4}...,马克-to-win给替换成max+1,这样就相当于把原来的最小从这个数组当中彻底清除掉了。

    27340

    面试小知识

    echo 和 print 都可以做输出,两者不同的是 echo 不是函数,没有返回,print是函数有返回; 所以相对而言如果只是输出,使用echo更好,echo会更快,而print_r通常用于打印变量的相关信息...print 是打印字符串 print_r 则是打印复合类型 如数组 对象 session和cookie的区别和优缺点?...1 array() 创建数组 2 count() 返回数组中元素的个数 3 array_push() 将一个或多个元素插入数组...(入栈) 4 array_column() 返回输入数组某个单一列的 5 array_combine() 通过合并两个数组来创建一个新数组 6 array_reverse(...) 以相反的顺序返回数组 7 array_unique() 删除数组的重复 8 in_array() 检查数组是否存在指定的 PHP处理字符串的常用函数说一说

    2.7K20

    初识HIVE

    HIVE定义了简单的类似SQL的查询语言HQL,HIVE会将解析的语句转移成MapReduce Job在Hadoop执行,一张Hive的表其实就是HDFS的文件 HIVE的元数据,用来描述表本身信息...,存储在deby HIVE中一些表的概念 管理表:也称作内部表,删除这张表的同时,数据也会被删除; 外部表:创建时用external标识,hive没有完全拥有这张表的数据,删除外部表只会删除hive...中元数据,而数据仍会保留; 分区表:是管理表和外部表在创建时指定的一种水平分散压力的方式,在创建表时,通过语句PARTITION BY指定,查询可以通过where语句添加分区字段进行过滤(分区过滤器)...子查询都必须具有相同的列 inner join,带on条件,左右两个表都有的时候,才输出; left outer join,符合where条件的左表有就输出,右表没有用NULL代替; right outer...的排序是全局排序的,但是是以去掉并行性为代价 sort by:是对每个ruducer排序,多个reducer顺序不一样,速度会快于order by ,order by是全局排序 动态分区与静态分区 静态分区:在从一个表获取数据插入另外一张表的时候

    85220

    第三章 内建容器 数组, 切片, map

    然后打印. 在打印数组. 结果如下: 证明数组拷贝类型 100 0 0 0 0 100 4 6 8 10 [0 0 0 0 0] [2 4 6 8 10] 5. 如何实现数组的地址传递呢?...发现s的变化了. 说明, 切片传递是地址传递, 而不是传递. 可是上一章讲指针的时候,不是说go只有拷贝一种类型么? 那么为什么slice不是拷贝呢? 因为slice是数组的一个视图....最终指向的都是数组的地址 updateSlice(s2): 这个操作就比较有意思了. 我们看到, 对二次reslice数组,修改他的第一个元素的....虽然s1只有4个元素, 因为他是可以看到底层其他后面的元素的, 所以, s2能够把数组第5个元素取出来. ? 那么取出来对应的元素时多少呢?对应到底层数组, 他的就是5和6 ?...= [100 6 10 11 12] , arr1 = [0 1 2 3 4 5 6 10] ,len(s5) 5 ,cap(s5) 6 我们打印出了每一次变化len的和cap的

    27310

    2019.4.7---Java面试题

    引用变量比较的是地址,所以第一个打印出来为true。 2.HashMap里的hashcode方法和equal方法什么时候需要重写?如果不重写会有什么后果?...这里由于hashcode一样,所以得出的数组下标位置相同。所以会在该数组位置创建一个链表,put进入的元素到放链表头,原来的元素向后移动。...(参考数组与链表来思考) 3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。...ans: volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取变量修改的最新的。volatile很容易被误用,用来进行原子性操作。...2秒钟以后控制台打印stope1182150156。 问题出现了,为什么我在主线程(main)设置了vt.flag = true; 而vt线程在进行判断flag的时候拿到的仍然是false?

    77900

    laravel 学习之路 Collections

    这就要了解下 Collections 对象,在 laravel collection 是比数组更高等般的存在,我们可以像对待数组一样的来操作 collection,而且它还能以链式操作的方式便捷易读的处理数据...u', '啦', 'p', '主', '真', '帅', false, null]; # 打印创建的数组 dump($array); # 把创建的数组转为...比如把 $array 的啦字去掉,接着过滤掉其中为 false 为空字符串 为 null 的 最后用 - 连接起来拼成 'up主真帅' 我们先用数组先玩一玩 function testArray...} 两种方式打印出来的结果是一样的 ?...up 17年刚刚接触 laravel 的时候不知道 collection 是个啥,只知道数组数据库查出来的时候都懵逼了百度半天才知道 ->toArray() 可以把 collection 转成数组,每次都是转成数组

    78830

    【Linux】命令行参数和环境变量

    几个问题 1.为什么函数的返回会被外部拿到呢? 答:返回的时候会保存到寄存器里,通过CPU的寄存器拿到数据。         当返回的数据很大时,会用多个寄存器保存。.../mycmd -a -b -c  -d" 被当成一个字符串,以空格为分隔,被分成了五个字符串,然后再依次填入argv指针数组,最后一个位置的下一个位置再填成空指针。 那么这有什么用呢?...使用下面命令,查看PATH环境变量 echo $PATH //$符号用于提取环境变量的,否则只是单纯的打印PATH  可以看到,这一串用 " : " 分隔开的路径,就是系统寻找命令的路径,我们可以把当前路径添加进...echo命令打印出来?...如果需要创建子进程,那么因为本地变量不会被继承,也就不会被打印出来,可事实并非如此。

    11210

    数据结构-树结构

    这也是为什么完全二叉树会单独拎出来的原因,也是为什么完全二叉树要求最后一层的子节点都靠左的原因。 当我们讲到堆和堆排序的时候,你会发现,堆其实就是一种完全二叉树,最常用的存储方式就是数组。...如何将所有节点都遍历打印出来呢?经典的方法有三种,前序遍历、序遍历和后序遍历。其中,前、、后序,表示的是节点与它的左右子树节点遍历打印的先后顺序。...前序遍历是指,对于树的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。 序遍历是指,对于树的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。...二叉查找树每一个节点不仅会存储一个数据,因此我们通过链表和支持动态扩容的数组等数据结构,把相同的数据都存储在同一个节点上。 第二种方法比较不好理解,不过更加优雅。 每个节点仍然只存储一个数据。...当要查找数据的时候,遇到相同的节点,我们并不停止查找操作,而是继续在右子树查找,直到遇到叶子节点,才停止。这样就可以把键值等于要查找的所有节点都找出来

    1.9K10

    跟着老猫来搞GO-容器(一)

    接下来老猫其实还想和大家分享另外一种方式,采用range关键字的方式 //i表示的是数据在数组的位置下标,v表示实际的 for i,v :=range arr3 { fmt.Println(i,v...,第一次打印是直接在函数打印,此时已经更改了第一个,其函数内部打印的结果为 0 300 1 2 2 3 3 4 4 5 显然内部的是变更了,然而我们再看一下外面的函数的打印,如下 0 1 1...,slice咱们可以将其看作为视图,就拿arr[2:6]来说,我们其实在原来数组的基础上抽取了从第二个位置到第六个位置的元素作为重新展现出来,当然我们的取值为左闭右开区间的。...同样的我们将s3表示出来,由此我们s3是在s2的基础上再次切片,理论上有三个下标值,分别是0、1、2下标取值,但是我们发现s2的3号位置指示虚幻出来的位置,并未真正存在与之对应,因此,咱们取交集之后与数组...为什么要把删除操作单独拎出来分享,主要是因为上述这些操作都有比较便捷的内建函数来使用,但是删除操作就没有了。

    21010

    为什么java的 HashMap 的加载因子是0.75?

    本文将探讨为什么Java的HashMap的加载因子被设置为0.75。背景在了解加载因子的作用之前,我们先来看一下HashMap的内部实现。...为什么加载因子是0.75?加载因子的选择是一个权衡的结果,它既要保证HashMap的性能又要节约内存空间。为什么Java的HashMap的加载因子被设置为0.75呢?...value); // 删除指定键的键值对 hashMap.remove("orange"); // 打印删除的HashMap内容 System.out.println...("删除的HashMap内容:" + hashMap); // 修改指定键的 hashMap.put("grape", 10); // 打印修改的HashMap...然后,我们展示了如何获取指定键的删除指定键的键值对以及修改指定键的。最后,我们打印了HashMap的内容。 通过运行示例代码,可以看到HashMap的加载因子的影响。

    21320

    数组splice_数组concat方法

    有三个方法经常会混淆,但是了解它你会发现很好区分 splice方法是数组特有的方法 spite方法是字符串特有的方法 slice方法是字符串和数组共同都有的方法 这里介绍下数组的常用方法 数组的splice...方法 splice()函数用于从当前数组移除一部分连续的元素。...如果start >= length,则不会移除任何元素,返回一个空数组。 如果参数items为数组类型(Array),仍会被当作一个元素看待,插入到当前数组。...返回 splice()函数的返回为Array类型,返回从当前数组中被移除的元素所组成的新的数组。...pop() 删除并返回数组的最后一个元素 shift() 删除并返回数组的第一个元素 splice() 删除元素,并向数组添加新元素。

    46330
    领券