一、 列表详解

1 列表方法总结
方法描述等价操作rust Vec类似操作
list.append(x)末尾添加元素a[len(a):] = [x]vec.push(x);
list.extend(iterable)扩展列表a[len(a):] = iterablevec.extend([4, 5, 6]); 或者更高效:vec.extend_from_slice(&[4, 5, 6]);
list.insert(i, x )指定位置插入vec.insert(1,X);
list.remove(x)删除第一个值为x的元素
list.pop([i])移除并返回指定位置元素vec.pop(); 及vec.remove(1);
list.clear()清空列表del a[:]vec.clear()
list.index(x[, start[, end]])返回第一个x的索引
list.count(x)统计x出现次数
list.sort(*, key=None, reverse=False)原地排序vec.sort();vec.sort_by(
list.reverse()原地反转
list.copy()浅拷贝a[:]
示例代码

fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']fruits.count('apple')  # 2
fruits.index('banana')  # 3
fruits.index('banana', 4)  # 6 (从索引4开始找)fruits.reverse()  # 反转列表
fruits.append('grape')  # 添加元素
fruits.sort()  # 排序
fruits.pop()  # 移除并返回最后一个元素
2 用列表实现堆栈(LIFO)

stack = [3, 4, 5]
stack.append(6)    # 压栈 → [3, 4, 5, 6]
stack.append(7)    # 压栈 → [3, 4, 5, 6, 7]
stack.pop()        # 出栈 → 7, 栈变为 [3, 4, 5, 6]
stack.pop()        # 出栈 → 6, 栈变为 [3, 4, 5]
3 用列表实现队列(FIFO)- 不推荐

# 效率低,推荐使用 collections.deque
from collections import dequequeue = deque(["Eric", "John", "Michael"])
queue.append("Terry")     # 入队
queue.append("Graham")    # 入队
queue.popleft()           # 出队 → 'Eric'
queue.popleft()           # 出队 → 'John'
4 列表推导式

基本语法


# 传统方式
squares = []
for x in range(10):squares.append(x**2)# 列表推导式(推荐)
squares = [x**2 for x in range(10)]

复杂示例


# 条件过滤
vec = [-4, -2, 0, 2, 4]
[x for x in vec if x >= 0]  # [0, 2, 4]# 应用函数
freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
[weapon.strip() for weapon in freshfruit]  # 去除空格# 嵌套循环
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]# 展平嵌套列表
vec = [[1,2,3], [4,5,6], [7,8,9]]
[num for elem in vec for num in elem]  # [1,2,3,4,5,6,7,8,9]
5 嵌套的列表推导式

matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],
]# 转置矩阵
transposed = [[row[i] for row in matrix] for i in range(4)]
# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]# 更简洁的方式(推荐)
list(zip(*matrix))

二、 del 语句


a = [-1, 1, 66.25, 333, 333, 1234.5]del a[0]        # 删除索引0的元素 → [1, 66.25, 333, 333, 1234.5]
del a[2:4]      # 删除切片 → [1, 66.25, 1234.5]
del a[:]        # 清空列表 → []
del a           # 删除整个变量

三、元组和序列

元组基本操作


# 创建元组
t = 12345, 54321, 'hello!'  # 打包
t[0]  # 12345# 解包
x, y, z = t# 嵌套元组
u = t, (1, 2, 3, 4, 5)# 不可变性(会报错)
# t[0] = 88888# 包含可变对象的元组
v = ([1, 2, 3], [3, 2, 1])
v[0][0] = 999  # 可以修改列表内容

特殊元组


empty = ()                 # 空元组
singleton = 'hello',       # 单元素元组(注意逗号)
len(empty)     # 0
len(singleton) # 1

四、集合

集合操作


# 创建集合
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
# {'orange', 'banana', 'pear', 'apple'} (去重)# 成员检测
'orange' in basket  # True# 集合运算
a = set('abracadabra')  # {'a', 'r', 'b', 'c', 'd'}
b = set('alacazam')     # {'a', 'c', 'l', 'm', 'z'}a - b  # 差集 {'r', 'd', 'b'}
a | b  # 并集 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a & b  # 交集 {'a', 'c'}
a ^ b  # 对称差集 {'r', 'd', 'b', 'm', 'z', 'l'}# 集合推导式
{x for x in 'abracadabra' if x not in 'abc'}  # {'r', 'd'}

五、字典

字典操作


# 创建字典
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127  # 添加/修改# 访问和删除
tel['jack']  # 4098
del tel['sape']  # 删除键
'guido' in tel  # True# 构造函数
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
dict(sape=4139, guido=4127, jack=4098)  # 关键字参数方式# 字典推导式
{x: x**2 for x in (2, 4, 6)}  # {2: 4, 4: 16, 6: 36}

六、循环的技巧

字典循环


knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():print(k, v)

枚举循环


for i, v in enumerate(['tic', 'tac', 'toe']):print(i, v)  # 0 tic, 1 tac, 2 toe

并行循环


questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):print(f'What is your {q}? It is {a}.')

反向和排序循环


# 反向循环
for i in reversed(range(1, 10, 2)):print(i)  # 9,7,5,3,1# 排序循环
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
for i in sorted(basket):  # 按顺序循环print(i)# 去重排序循环
for f in sorted(set(basket)):print(f)  # apple, banana, orange, pear

七、深入条件控制

比较运算符


# 链式比较
a < b == c  # 等价于 a < b and b == c# 布尔运算
A and not B or C  # 等价于 (A and (not B)) or C# 短路特性
string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
non_null = string1 or string2 or string3  # 'Trondheim'

八、序列比较

字典式顺序比较


(1, 2, 3) < (1, 2, 4)  # True
[1, 2, 3] < [1, 2, 4]  # True
'ABC' < 'C' < 'Pascal' < 'Python'  # True
(1, 2, 3, 4) < (1, 2, 4)  # True (前两个元素相等,第一个序列更长)
(1, 2) < (1, 2, -1)  # True (第二个序列更长)
(1, 2, 3) == (1.0, 2.0, 3.0)  # True (数值相等)

九、重要注意事项

  • 列表方法:insert, remove, sort 等方法返回 None,不要期待它们返回值

  • 可变性:列表可变,元组不可变

  • 集合去重:集合自动去除重复元素

  • 字典键:必须是不可变类型(字符串、数字、元组等)

  • 循环技巧:善用 enumerate(), zip(), reversed(), sorted(), set()

这些数据结构是Python编程的基础,熟练掌握它们能大大提高编码效率。

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

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

相关文章

Python爬虫实战:研究Radar chart,构建多维度数据采集和分析系统

1. 引言 1.1 研究背景与意义 在信息爆炸的时代,互联网蕴含的海量数据已成为企业决策、学术研究和产品评估的重要依据。这些数据往往包含多个维度的特征,如电商平台的商品信息涵盖价格、销量、评价、性能参数等,社交媒体的用户数据涉及活跃度、互动量、内容偏好等。传统的单…

[灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU之串口DMA

在 MM32SPIN560C 微控制器中&#xff0c;串口&#xff08;UART&#xff09;的 DMA 传输可大幅减轻 CPU 负担&#xff0c;实现数据的“自动收发”。结合《MM32SPIN560C 用户手册&#xff08;中文版&#xff09;》中 UART 和 DMA 相关章节&#xff0c;以下从“原理匹配”“配置步…

【机器学习】-torch相关知识01

学习代码时遇到的问题&#xff0c;GPT给的答案&#xff0c;如有错误请指出。 问题1 torch.empty nn.init.xavier 问题2 nn.Parameter 是什么&#xff1f; 问题3 self.add_module 问题4 torch.matmul torch.mm 文章目录问题1 torch.empty nn.init.xavier问题2 nn.Parameter 是什…

Hutool DsFactory多数据源切换

一、简单上手&#xff1a;从配置到使用全流程 DsFactory 的核心优势是零侵入配置&#xff0c;支持多种配置方式&#xff0c;不管是 properties 文件还是代码里直接定义&#xff0c;都能快速初始化数据源。先引依赖&#xff08;Maven&#xff09;&#xff1a; <dependency>…

Mysql中事务隔离级别有哪些?

Mysql中事务隔离级别有哪些&#xff1f; 读未提交&#xff1a; 一个事务可以看到另一个事务尚未提交的数据。可能导致脏读。 读已提交&#xff1a; 一个事务只能看到其他事务提交后的数据。避免了脏读&#xff0c;仍可能引发不可重复读。 可重复读&#xff1a; 可以确保一个事务…

el-carousel在新增或者删除el-carousel-item时默认跳到第一页的原因和解决

现象 使用走马灯效果时 当el-carousel-item增加或者减少时&#xff0c;页会跳到第一页 体验很不友好。 原因 当新增或这删除el-carousel-item时&#xff0c;会触发setActiveIndex&#xff08;props.initialindex&#xff09;, setActiveIndex的行为是小于0或者大于最大页会有一…

人工智能学习:机器学习相关面试题(二)

7、有监督学习和无监督学习的区别 有监督学习&#xff1a; 对具有概念标记&#xff08;分类&#xff09;的训练样本进行 学习&#xff0c;以尽可能对训练样本集外的数据进行 标记&#xff08;分类&#xff09;预测。 这里 &#xff0c;所有的标记&#xff08;分类&#xff09…

python如何下载svg图片

# 生成博客文章框架代码 import datetimeblog_content f"""# Python如何下载SVG图片## 引言 SVG&#xff08;可缩放矢量图形&#xff09;作为一种基于XML的矢量图形格式&#xff0c;在Web开发中广泛应用。本文将介绍如何使用Python从网络下载SVG图片&#xff0…

Linux(一) | 初识Linux与目录管理基础命令掌握

个人主页-爱因斯晨 文章专栏-Linux 最近学习人工智能时遇到一个好用的网站分享给大家&#xff1a; 人工智能学习 文章目录个人主页-爱因斯晨文章专栏-Linux一、前言1.为什么学习Linux2.操作系统概述&#xff1a;3.常见的操作系统&#xff1a;二、初识Linux1.诞生2.什么是Linux…

android-studio 安装

下载地址 国内&#xff1a;https://developer.android.google.cn/studio?hlzh-cn 全国&#xff1a;https://developer.android.com/studio 1.设置 ANDROID_HOME 环境变量 ANDROID_HOME D:\zhy\android-studio\sdk 2. 更新 PATH 环境变量 %ANDROID_HOME%\platform-tools %AN…

【重学MySQL】九十三、MySQL字符集与比较规则完全解析

【重学MySQL】九十三、MySQL字符集与比较规则完全解析一、字符集概述1.1 支持的字符集1.2 UTF8与UTF8MB4的区别二、比较规则&#xff08;Collation&#xff09;2.1 比较规则分类2.2 常见比较规则差异三、配置层级与继承关系3.1 配置层级3.2 继承关系四、最佳实践与问题解决4.1 …

基于Kafka的延迟队列

实现原理 通过topic区分不同的延迟时长&#xff0c;每个topic对于一个延迟&#xff0c;比如 topic100 仅存储延迟 100ms 的消息&#xff0c;topic1000 仅存储延迟 1s 的消息&#xff0c;依次类推。生产消息时&#xff0c;消息需按延迟时长投递到对应的topic。消费消息时&#x…

LabVIEW转速仪校准系统

LabVIEW 与机器视觉的智能校准系统以工控机为核心&#xff0c;整合标准源、智能相机等硬件&#xff0c;通过软件实现校准流程自动化&#xff0c;支持 500-6000r/min 转速范围校准&#xff0c;覆盖 5 类转速测量仪&#xff0c;校准时间缩短约 70%&#xff0c;满足计量院高效、精…

Synchronized 概述

1. 初识 synchronized 是 Java 中的关键字&#xff0c;是一种 同步锁 &#xff0c;可重入锁&#xff0c;悲观锁。它修饰的对象有以下几种&#xff1a; 具体表现为以下3种形式。 对于普通同步方法&#xff0c;锁是当前实例对象。 对于静态同步方法&#xff0c;锁是当前类的 Clas…

通过Auth.log来查看VPS服务器是否被扫描和暴力破解及解决办法

说明&#xff1a;很多人vps可能出现过被扫的情况&#xff0c;有的还被爆破了&#xff0c;这里提供下查看方法 查看用密码登陆成功的IP地址及次数grep "Accepted password for root" /var/log/auth.log | awk {print $11} | sort | uniq -c | sort -nr | more查看用密…

碰一碰发视频手机版源码开发:支持OEM

**从事开发 20 年&#xff0c;见过不少技术风口起起落落&#xff0c;最近 “碰一碰发视频” 又成了热门话题。不少同行或刚入行的年轻人来问我&#xff0c;手机版源码开发该从哪下手&#xff0c;怕踩坑、怕走弯路。今天就以一个老程序员的视角&#xff0c;把碰一碰发视频手机版…

只出现一次的数字(总结)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、给定一个整数数组nums&#xff0c;除了某个元素只出现一次以外&#xff0c;其余元素均出现两次。找出那个只出现一次的元素二、给你一个整数数组nums&#x…

Cesium 入门教程(十一):Camera相机功能展示

文章目录一&#xff0c;Cesium 实际示例&#xff08;含源代码&#xff09;1&#xff0c;vuecesium&#xff1a; 围绕一个固定点自动左右旋转2&#xff0c;vuecesium&#xff1a; flyto一个具体的实体位置3&#xff0c;vuecesium&#xff1a; flyto一个具体的点位置4&#xff0c…

go语言基本排序算法

package mainimport "fmt"func main() {BubbleSort()SelectSort()InsertSort()MergeSort()QuickSort()HeapSort()ShellSort() }//冒泡排序 func BubbleSort() {str : []int{9, 1, 5, 8, 3, 7, 4, 6, 2}for i : 0; i < len(str)-1; i {flag : falsefor j : len(str…

一步完成CalDAV账户同步,日历服务助力钉钉日历日程集中管理

在信息爆炸节奏飞快的今天&#xff0c;高效的管理时间已经成为我们工作和生活中的核心竞争力&#xff0c;复杂纷繁的日程安排&#xff0c;无处不在的提醒需求以及跨设备同步的困扰&#xff0c;这些问题仿佛都在呼唤着一个更智能、更便捷、更可靠的解决方案。 而华为日历App&am…