首页
学习
活动
专区
工具
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之间的转化 ? 打印: ?

97730

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;//空间容量,假设我们扩容了,用其记录扩容动态数组的大小。

    12210

    理解原型与原型链

    在软件设计模式,有一种模式叫做原型模式,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 函数可以获取对象所有的自身属性,返回是由对象自身属性名称组成的数组,同样不会向上查找对象原型链。

    56120

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

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

    27740

    面试小知识

    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是全局排序 动态分区与静态分区 静态分区:在从一个表获取数据插入另外一张表的时候

    85920

    第三章 内建容器 数组, 切片, 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的

    28410

    整型在内存的存储

    前言: 本文章旨在从例题中加深对整型在数据的存储的相关知识的理解。 首先我们需要明确整型在内存中都是以补码的形式进行计算 例1: 解析: 首先我们需要明确整型在内存中都是以补码的形式进行计算。...接着将一个整型类型的数据存储在char类型,需要进行截断(直接截断整型的8位)。 所以存储在a的补码就是8个1。同理目前在a,b,c存储的都是8个1....综上,a,b的打印结果都是-1,c的打印结果是255 总结: 因为将整形数据存储在char类型,所以先进行截断,接着%d打印又需要整型提升!...(因为存在内存都是一样的) 例4: 解析: 首先将两个数的补码表示出来,然后利用补码计算。...例6: 解析: 首先我们从数学的角度理解在数组a里面存储的应该是-1~-1000,但是又因为a是一个char类型的数组,而一个char类型的数组只能存的下-128~127,所以在数组真实的存储情况是这样

    9410

    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?

    78500

    laravel 学习之路 Collections

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

    80030

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

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

    12210

    C语言详解(数据存储)

    ,补完还是32个1,取反加一得原码又变为了-1,最终结果就打印出了-1,因为在VSchar和signed char是一样的,所以打印b也就同样的道理。...练习5 创建一个整型数组大小4,&a取出整个数组的地址再+1跳过整个数组指向数组末尾,此时指针(地址)的类型是int (*) [4],再强转为 int * 类型的指针赋给ptr1,ptr1...[-1]( *(ptr -1) )就是int *类型的指针-1向后推4个字节指向数组最后一个元素4,再解引用用%x(打印16进制)打印出来就是4。...了解清楚了浮点数在内存的存取,我们再来分析一下前面的那个代码。 创建一个整型变量n赋值为9,用%d打印时就按常规打印出整数9。...本节内容并不需要我们死记硬背,只需要知道整数和浮点数在底层是怎么存取的,又有什么差异,当某天我们错用格式符打印不同类型的时,我们要知道是怎么回事,要会分析,为什么会输出这个,这个是随机的还是有它的道理的就行

    8110

    数据结构-树结构

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

    1.9K10
    领券