1 Python 列表切片

一、切片完整语法

列表切片的基本格式:
列表[start:end:step]

start:起始索引(包含该位置元素,可省略)

end:结束索引(不包含该位置元素,可省略)

step:步长(每隔多少个元素取一次,默认 1,可省略)

注意

  • 索引可为正数(从左往右,从 0 开始)或负数(从右往左,从 - 1 开始)
  • 省略参数时,冒号的位置需保留以区分参数位置

二、常用切片场景及示例

以列表 a = [2, 4, 6, 8, 20, 30, 40] 为例:

1. 省略 step(默认步长 1)
  • a[start:end]:从start取到end(不包含end

    • a[2:5] → 从索引 2 到 4(5-1)→ [6, 8, 20]
    • a[-4:-1] → 从倒数第 4 到倒数第 2 → [8, 20, 30]
  • a[start:]:省略end,表示取到列表末尾

    • a[3:] → 从索引 3 到末尾 → [8, 20, 30, 40]
    • a[-2:] → 从倒数第 2 到末尾 → [30, 40](你提到的情况)
  • a[:end]:省略start,表示从开头取到end

    • a[:3] → 从开头到索引 2 → [2, 4, 6]
    • a[:-2] → 从开头到倒数第 3 → [2, 4, 6, 8, 20]
  • a[:]:省略startend,表示取整个列表

    • a[:] → [2, 4, 6, 8, 20, 30, 40](相当于复制列表)
2. 指定 step(步长)
  • a[::step]:省略startend,表示从开头到末尾按步长取

    • a[::2] → 步长 2(每隔 1 个取 1 个)→ [2, 6, 20, 40](你提到的情况)
    • a[::3] → 步长 3 → [2, 8, 40]
  • a[start:end:step]:指定起始、结束和步长

    • a[1:6:2] → 从索引 1 到 5,步长 2 → [4, 8, 30]
    • a[-5::-1] → 从倒数第 5 开始,步长 - 1(反向取)→ [6, 4, 2]
3. 负数步长(反向切片)
  • 步长为负数时,start 需大于 end(从右往左取)
    • a[::-1] → 反转列表 → [40, 30, 20, 8, 6, 4, 2]
    • a[5:1:-1] → 从索引 5 到 2,反向取 → [30, 20, 8, 6]

三、总结

  • 一个冒号 : 用于分隔 start 和 end(省略step
  • 两个冒号 :: 用于指定 step(可省略startend
  • 负数索引从末尾开始计数(-1 是最后一个元素)
  • 省略参数时,默认值为:start=0end=列表长度step=1

通过这些规则,可以灵活地截取列表中的任意部分。

2 enumerate 下标从0开始

在Python3中,下列程序运行结果为:
lists = [1, 2, 3, 4]
tmp = 0
for i,j in enumerate(lists):tmp += i * j
print(tmp)A 20
B 30
C 100
D None正确答案:A

解析过程

  1. enumerate () 函数作用
    用于将可遍历对象(如列表)组合为索引 - 元素对,格式为enumerate(sequence, [start=0])默认从 0 开始计数,在 for 循环中可同时获取索引和元素值

  2. 循环过程拆解
    遍历列表[1, 2, 3, 4]时,索引i和元素j的对应关系及计算如下:

    • i=0, j=1 → 0×1 = 0 → tmp=0
    • i=1, j=2 → 1×2 = 2 → tmp=0+2=2
    • i=2, j=3 → 2×3 = 6 → tmp=2+6=8
    • i=3, j=4 → 3×4 = 12 → tmp=8+12=20
  3. 最终结果
    变量tmp的最终值为 20,因此程序输出 20。

3 Python字典的get()方法的使用

在 Python 中,字典的 get() 方法用于获取指定键对应的值,它是一种安全获取字典元素的方式,相比直接使用 键名 访问(如 dict[key]),能更好地处理键不存在的情况。

基本语法

python

运行

dict.get(key, default_value)

  • 参数说明
    • key:必需,要查找的键。
    • default_value:可选,当键不存在时返回的默认值(如果不指定,默认返回 None)。

使用场景与示例

1. 基本使用:获取存在的键的值

当键存在于字典中时,get() 会返回该键对应的 value:

python

运行

person = {"name": "Alice", "age": 25, "city": "New York"}# 获取存在的键
name = person.get("name")
print(name)  # 输出:Aliceage = person.get("age")
print(age)   # 输出:25
2. 处理键不存在的情况!!!!!!!!!!!!!!!!!!!!

当键不存在时,get() 会返回指定的默认值(或 None),而不会像直接访问 dict[key] 那样抛出 KeyError 错误:

python

运行

person = {"name": "Alice", "age": 25}# 键不存在,不指定默认值,返回 None
gender = person.get("gender")
print(gender)  # 输出:None# 键不存在,指定默认值
country = person.get("country", "Unknown")
print(country)  # 输出:Unknown
3. 与直接访问的对比

直接使用 dict[key] 访问不存在的键会报错,而 get() 更安全:

python

运行

person = {"name": "Alice"}# 直接访问不存在的键,会抛出 KeyError
# print(person["height"])  # 报错:KeyError: 'height'# 使用 get() 方法,返回默认值
height = person.get("height", 160)
print(height)  # 输出:160(不会报错)

总结

  • get() 方法的核心优势是避免因键不存在而导致的 KeyError,适合在不确定键是否存在的场景中使用。
  • 当需要为不存在的键返回特定默认值(如空字符串、0、提示信息等)时,get() 比条件判断(如 if key in dict)更简洁。

4 Python 中文件对象的 seek() 方法

【file里面的seek方法是不是就是移动指针的意思?】

是的,Python 中文件对象的 seek() 方法的核心作用就是移动文件指针的位置

文件指针可以理解为 “当前读写操作的位置”,就像我们阅读书本时的书签 —— 打开文件后,指针默认在文件开头(位置 0),随着读写操作会自动移动;而 seek() 允许我们主动调整这个 “书签” 的位置,从而实现从指定位置开始读写的功能。

基本语法

python

运行

file.seek(offset, whence)
  • offset:必需,整数,表示要移动的字节数(正数向前移动,负数向后移动)。
  • whence:可选,整数,指定偏移量的参考位置(默认值为 0):
    • 0:从文件开头开始计算(默认模式)。
    • 1:从当前指针位置开始计算。
    • 2:从文件末尾开始计算。

示例说明

假设文件 test.txt 内容为:"abcdefghij"(共 10 个字符,每个字符占 1 字节)。

python

运行

with open("test.txt", "r") as f:# 初始指针在 0(文件开头)print(f.read(2))  # 读取 2 字节,返回 "ab",指针移到 2f.seek(4)  # 指针移到位置 4(从开头计算)print(f.read(3))  # 从位置 4 开始读 3 字节,返回 "efg",指针移到 7f.seek(-2, 2)  # 从文件末尾(位置 10)向前移动 2 字节,指针到 8print(f.read())  # 从位置 8 开始读,返回 "ij"

注意事项

  1. 文本模式与二进制模式

    • 文本模式("r"/"w" 等)下,whence=1 和 whence=2 可能会报错(不同 Python 版本行为有差异),建议仅在二进制模式("rb"/"wb" 等)中使用这两种模式。
    • 文本模式中,offset 通常应为非负整数,且需与文件的编码方式兼容(避免在多字节字符中间定位)。
  2. 与读写操作的配合

    • 写入文件时,seek() 可以控制写入的位置(可能覆盖原有内容)。
    • 读取文件时,seek(0) 常用于将指针重置到开头,实现 “重新读取” 的效果。

总之,seek() 是通过移动文件指针来精确控制文件读写位置的关键方法,在需要随机访问文件内容时非常实用。

5 不同方法处理 "查找不到目标" 的情况

注意到:

find()方法用于在字符串中查找子字符串,当查找的子字符串不存在时,会返回-1。

--------------------------------------------------具体整理一下这些吧!

在 Python 中,不同方法处理 "查找不到目标" 的情况时,返回值或行为确实存在差异,主要分为以下几类,理解这些差异可以帮助你正确处理各种场景:

一、返回特定值(不报错)

这类方法在找不到目标时会返回一个约定好的 "空值" 或特定标记,不会抛出错误,最常见的有:

  1. 字符串方法

    • find(sub) / rfind(sub):找不到返回 -1(如前面提到的)
    • index(sub) / rindex(sub)注意:这两个方法与find功能类似,但找不到时会直接抛出 ValueError

    python

    运行

    s = "hello"
    print(s.find("x"))  # 返回 -1(安全)
    # print(s.index("x"))  # 报错:ValueError: substring not found
    
  2. 字典方法

    • get(key, default):找不到键时返回 default(默认是None,如之前讲的)
    • dict[key] 直接访问:找不到键时会抛出 KeyError

    python

    运行

    d = {"name": "Alice"}
    print(d.get("age"))  # 返回 None(安全)
    # print(d["age"])  # 报错:KeyError: 'age'
    

二、返回None(不报错)

部分方法在找不到目标或操作无结果时,会默认返回None(通常是因为没有更合适的返回值):

  1. 列表的remove()方法

    • 移除指定元素,成功无返回值(实际返回None),但找不到元素时会抛出ValueError

    python

    运行

    lst = [1, 2, 3]
    print(lst.remove(2))  # 返回 None(操作成功)
    # lst.remove(4)  # 报错:ValueError: list.remove(x): x not in list
    
  2. 字符串的replace()方法

    • 替换子字符串,找不到时返回原字符串(不会返回None,也不报错)

    python

    运行

    s = "hello"
    print(s.replace("x", "a"))  # 找不到"x",返回原字符串 "hello"
    

三、总结:如何正确处理?

  1. 优先使用 "安全方法"
    当不确定目标是否存在时,尽量用返回特定值的方法(如find()get()),避免直接访问(如index()dict[key]),减少报错风险。

    python

    运行

    # 安全判断字符串是否包含子串
    s = "test"
    if s.find("x") != -1:  # 用 -1 判断print("存在")
    else:print("不存在")# 安全获取字典值
    d = {"a": 1}
    value = d.get("b", 0)  # 找不到时用默认值0,避免报错
    
  2. 必须用可能报错的方法时,加异常处理
    如果需要用index()list.remove()等可能报错的方法,用try-except捕获异常:

    python

    运行

    lst = [1, 2, 3]
    try:lst.remove(4)
    except ValueError:print("元素不存在,无需移除")
    
  3. 记住关键区别

    • 返回-1find()rfind()(字符串)
    • 返回Noneget()(不指定默认值时)、remove()(列表)等
    • 直接报错:index()rindex()(字符串)、dict[key](字典)、list.remove()(元素不存在时)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93565.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93565.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93565.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux -- 文件【下】

目录 一、EXT2文件系统 1、宏观认识 2、块组内部构成 2.1 Data Block 2.2 i节点表(Inode Table) 2.3 块位图(Block Bitmap) 2.4 inode位图(Inode Bitmap) 2.5 GDT(Group Descriptor Table) 2.6 超…

谷歌手机刷机和面具ROOT保姆级别教程

#比较常用的谷歌输入root面具教程,逆向工程师必修课程# 所需工具与材料清单 真机设备 推荐使用 Google Pixel 4 或其他兼容设备,确保硬件支持刷机操作。 ADB 环境配置 通过安装 Android Studio 自动配置 ADB 和 Fastboot 工具。安装完成后,需在系统环境…

平衡二叉搜索树 - 红黑树详解

文章目录一、红黑树概念引申问题二、红黑树操作一、红黑树概念 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位用来表示节点颜色(红色或者黑色),红黑树通过约束颜色,可以保证最长路径不超过最短路径的两倍,因而近似平衡…

从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.14

第十六天 第五十二,五十三,五十四,五十五和五十六集 第五十二集 文件包含 一个include命令只能指定一个被包含文件 文件允许嵌套,就是一个被包含的文件可以包含另一个文件。 文件名可以用尖括号或者双引号括起来 但是两种的查找方…

B+树索引分析:单表最大存储记录数

在现代数据库设计中,随着数据量的增加,如何有效地管理和优化数据库成为了一个关键问题。根据阿里巴巴开发手册的标准,当一张表预计在三年内的数据量超过500万条或者2GB时,就应该考虑实施分库分表策略 Mysql B树索引介绍 及 页内储…

三、memblock 内存分配器

两个问题: 1、系统是怎么知道物理内存的?linux内存管理学习(1):物理内存探测 2、在内存管理真正初始化之前,内核的代码执行需要分配内存该怎么处理? 在Linux内核启动初期,完整的内存…

Python 桌面应用形态后台管理系统的技术选型与方案报告

下面是一份面向“Python 桌面应用形态的后台管理系统”的技术选型与方案报告。我把假设前提→总体架构→客户端技术选型→服务端与数据层→基础设施与安全→交付与运维→质量保障→里程碑计划→风险与对策→最小可行栈逐层给出。 一、前置假设 & 非功能目标 业务假设 典型…

Winsows系统去除右键文件显示的快捷列表

前言:今天重做了电脑系统,安装的是纯净版的系统。然后手动指定D盘安装了下列软件。(QQ,迅雷,百度网盘,搜狗输入法,驱动精灵)然后我右键点击桌面的软件快捷方式,出现了一排…

【Go】Gin 超时中间件的坑:fatal error: concurrent map writes

Gin 社区超时中间件的坑:导致线上 Pod 异常重启 在最近的项目中,我们遇到了因为 Gin 超时中间件(timeout) 引发的生产事故:Pod 异常退出并重启。 问题现场 pod无故重启,抓取标准输出日志,问题…

数据结构:用数组实现队列(Implementing Queue Using Array)

目录 第1步:设计蓝图 (The Struct) 第2步:队列的诞生 (创建与初始化) 第3步:状态检查 (判满与判空) 第4步:核心操作 (入队与出队) 入队 (Enqueue) 出队 (Dequeue) 第5步:善后工作 (销毁队列) 现在,我…

Boost库核心组件与应用

一、BOOST 库简介:C 开发者的 “扩展工具集” 在 C 编程领域,除了标准库(STL)外,BOOST 库是最具影响力的第三方库之一。它由全球数百位开发者共同维护,包含超过 160 个高质量的组件,覆盖从基础…

机器学习 [白板推导](十二)[卡曼滤波、粒子滤波]

15. 线性动态系统(卡曼滤波,Kalman Filter) 15.1. 概述 15.1.1. 背景介绍 变量随时间变化的系统叫做动态系统,其中隐变量取值离散的是隐马尔可夫模型(HMM),而隐变量取值连续的分为线性动态系统…

RH134 访问网络附加存储知识点

1. NFS 的主要功能是什么?答:NFS是一种分布式文件系统协议,主要功能包括:允许远程计算机通过网络访问共享文件。 实现文件系统在客户端和服务器之间的透明访问。支持文件的共享、读取和写入,使得多个 …

组合模式及优化

组合模式是一种结构型设计模式,其核心思想是将对象组合成树形结构,以表示“部分-整体”的层次关系,使得用户对单个对象和组合对象的使用具有一致性。 一、介绍 核心角色 组合模式包含以下3个关键角色: 抽象组件(Compon…

【wmi异常】关于taskkill命令提示“错误:找不到” 以及无法正常获取设备机器码的处理办法

记录一下我的解决方案。 我先查阅了这篇博客:https://blog.csdn.net/qq_45698181/article/details/138957277 发现他写的批处理不知怎么执行不了,后来问了ai又可以执行了,估计是csdn防盗版格式问题 这里写一下我跟ai的对话,大家可…

制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活

【导语】Minktec 最新实验显示:将Minktec 柔性弯曲形变传感器FlexTail 贴于受试者背部,记录 1 分钟内从洗碗机取餐具的动作,结合配套的flexlib -专用Python库分析,不仅量化出 “越低越伤腰” 的结论,更为制造装配、物流…

Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务

> 一招解决搜索引擎爬虫无法解析现代前端框架的痛点,提升网站收录率与SEO排名! **痛点场景**:你的网站采用Vue/React等前端框架构建,页面内容依赖JavaScript动态渲染。搜索引擎爬虫访问时,只能抓取到空HTML骨架,无法获取真实内容,导致网站收录率低、SEO效果差。 --…

链表。。。

目录 5.1 链表的结点 5.2 插入 5.3 链表长度 5.4 查找 5.5 指定位置删除 5.6 代码 5.1 链表的结点 一个结点包括:值和指向下一个结点的指针。 package com.qcby.链表;public class Node {int value;Node next;public Node(int val){valueval;}Overridepublic…

私人AI搜索新突破:3步本地部署Dify+Ollama+QwQ,搜索能力MAX

1.安装Docker容器 本地部署Dify要先安装Docker桌面版,跟Ollama一样简单,也是去官网下载对应版本文件,直接安装就OK。 2:安装Dify 安装 Dify 简单的方式就是git clone,复制其github地址github.com/langgenius/dify&am…

(2-10-1)MyBatis的基础与基本使用

目录 0.前置小节 1. MyBatis 框架介绍 1.1 软件开发中的框架 1.2 使用框架的好处 1.3 SSM 开发框架 1.4 什么是 MyBatis 1.5 MyBatis 的开发流程 2. MyBatis 的开发流程 2.0 MyBatis的工作流程 2.1 引入 MyBatis 依赖 00.base(目录、pom、单元测试、Junit4) 01.Cal…