Python 切片索引越界的问题(数组下标越界)

作者:KoenigseggH 时间:2023-09-11 23:00:30 

前言

Python语言处理字符串、数组类的问题时有一定概率需要使用切片方法,比如:Leetcode_5。
学习官方解法时发现切片的索引可以超出字符串或数组最大索引值,此时编译器不会报错。
欢迎大佬留言说明这种情况的具体原因,本文只进行一些情况的简单测试。

实例代码


a = '123'
b = a[:5]
print(b)

发现结果为123,编译器没有报错。而当直接使用a[5]时即报错string index out of range。下面是测试结果。

测试代码(字符串)


a = "1234567890"
a1 = a[:]
a2 = a[:len(a)]
a3 = a[:15]
a4 = a[16:16]
a5 = a[:2]

运行结果:

This is the id of 'a' :  2707772994160
This is the type of 'a' :  <class 'str'>
This is the value of 'a' :  1234567890

This is the id of 'a1' :  2707772994160
This is the type of 'a1' :  <class 'str'>
This is the value of 'a1' :  1234567890

This is the id of 'a2' :  2707772994160
This is the type of 'a2' :  <class 'str'>
This is the value of 'a2' :  1234567890

This is the id of 'a3' :  2707772994160
This is the type of 'a3' :  <class 'str'>
This is the value of 'a3' :  1234567890

This is the id of 'a4' :  2707740774832
This is the type of 'a4' :  <class 'str'>
This is the value of 'a4' : 

This is the id of 'a5' :  2707773122544
This is the type of 'a5' :  <class 'str'>
This is the value of 'a5' :  12

值得注意的地方:

  • 若切片后结果与原来相同,则新字符串所指向的物理地址就是原字符串的物理地址(a1、a2、a3)。

  • 若切片后结果与原来不同,则新字符串指向新的物理地址(a5)。

  • 若当前切片索引范围内不存在合法数值,则返回相应类型的空值(a4)。

测试代码(数组)


b = [1, 2, 3, 4, 5]
b1 = b[:]
b2 = b[:len(b)]
b3 = b[:15]
b4 = b[16:16]
b5 = b[:2]

This is the id of 'b' :  2260784433096
This is the type of 'b' :  <class 'list'>
This is the value of 'b' :  [1, 2, 3, 4, 5]

This is the id of 'b1' :  2260784432456
This is the type of 'b1' :  <class 'list'>
This is the value of 'b1' :  [1, 2, 3, 4, 5]

This is the id of 'b2' :  2260784470920
This is the type of 'b2' :  <class 'list'>
This is the value of 'b2' :  [1, 2, 3, 4, 5]

This is the id of 'b3' :  2260784534280
This is the type of 'b3' :  <class 'list'>
This is the value of 'b3' :  [1, 2, 3, 4, 5]

This is the id of 'b4' :  2260784471432
This is the type of 'b4' :  <class 'list'>
This is the value of 'b4' :  []

This is the id of 'b5' :  2260784231944
This is the type of 'b5' :  <class 'list'>
This is the value of 'b5' :  [1, 2]

值得注意的地方:

  • 数组切片操作必定指向新的物理地址。

  • 若当前切片索引范围内不存在合法数值,则返回相应类型的空值(b4)。

来源:https://blog.csdn.net/jh_210/article/details/107768652

标签:Python,切片,索引越界
0
投稿

猜你喜欢

  • ASP脚本变量、函数、过程和条件语句

    2008-10-14 14:43:00
  • 基于tkinter中ttk控件的width-height设置方式

    2023-07-04 21:32:20
  • pandas函数isnull的具体使用

    2022-08-04 18:43:02
  • 在Python程序员面试中被问的最多的10道题

    2022-02-27 08:20:03
  • Python用5行代码实现批量抠图的示例代码

    2021-04-16 23:56:05
  • js滑动展开与折叠效果(收缩)

    2007-10-09 13:17:00
  • 详解Python装饰器之@property

    2021-06-25 15:55:45
  • Python多线程的使用详情

    2023-05-29 15:13:36
  • 解决python3中的requests解析中文页面出现乱码问题

    2023-11-22 07:04:55
  • 利用Opencv实现图片的油画特效实例

    2022-01-26 14:31:59
  • javascript彩虹圈效果

    2011-08-05 19:10:45
  • C# 以MDF文件链接数据库的示例代码

    2024-01-21 09:38:18
  • Python timeit模块原理及使用方法

    2023-09-22 08:19:18
  • Go Gin实现文件上传下载的示例代码

    2023-06-21 15:11:13
  • 对python中的six.moves模块的下载函数urlretrieve详解

    2023-10-20 00:23:45
  • pandas创建series的三种方法小结

    2023-02-28 20:59:23
  • 改善登陆界面的用户体验: 自动聚焦表单

    2009-12-09 16:13:00
  • 深入解析JavaScript中的arguments对象

    2024-05-09 14:50:44
  • Django数据库连接丢失问题的解决方法

    2024-01-18 12:05:24
  • ORACLE应用经验(2)

    2010-07-31 13:31:00
  • asp之家 网络编程 m.aspxhome.com