当前位置: 首页 > news >正文

Python基础学习笔记(六)——列表

目录

  • 一、一维列表的介绍和创建
  • 二、序列的基本操作
    • 1. 索引的查询与返回
    • 2. 切片
    • 3. 序列加
  • 三、元素的增删改
    • 1. 添加元素
    • 2. 删除元素
    • 3. 更改元素
  • 四、排序
  • 五、列表生成式

一、一维列表的介绍和创建

  列表(list),也称数组,是一种有序、可变、允许重复元素的组合数据结构,属于可变序列,由方括号[]内、用逗号分隔的一组元素组成。

  列表可存储多个元素以方便对一组数据整体操作。不同的列表的内存地址互不相同,即id独立。

  列表有两种创建方式:直接将目的列表赋予变量,称为赋值创建;使用list()函数将任意组合转化为列表,称为引用创建

  下文的列表均指一维列表

# 空列表
lst = []
lst = list()# 赋值创建
lst = [1, 2, 3]# 引用创建(字典转列表):转化前后元素不变
lst = list({'1': 'a', '2': 'b', '3': 'c', })print(lst, type(lst), id(lst))
[1, 2, 3] <class 'list'> 1937556730752

  列表的元素可以是任意数据类型的对象引用,也就是一维指针。所以列表实际上是一种二维指针,用于存储一维指针。

  在Python中,通常不采用这种描述,因为Python不支持指针的直接操作。但是,列表的索引可以模拟二级指针。

二、序列的基本操作

  以下操作适用于所有序列,即列表、元组和字符串,下文仅以列表为例。

1. 索引的查询与返回

  索引描述了序列中的元素的位置,是用于访问元素的操作方法,分为正数索引负数索引

  序列中的元素从左到右的正数索引依次为0, 1, 2, ... , n从右到左的负数索引依次为-1, -2, ... , -n

  可以通过查询索引获取对应元素的值

lst = [1, 2, 3]
print(lst[0], lst[-3])
1 1

  也可以使用index()函数,通过元素的值返回对应的正数索引。若列表存在相同的元素,只返回最小的正数索引;若列表不存在对应的元素,报错ValueError.

  index(arg1, arg2=0, arg3=len(list))限定索引区间默认步长为1,开始索引为0,结束索引为列表长度(元素个数),区间形式与range函数相似,即左闭右开

  若arg3未传递,传递了负数,或者传递了小于arg2的值,则参数arg3无效,函数功能为:返回索引为arg2上的指定元素的正数索引。一般不会用到该功能。特别的,若arg2=arg3,一定会报错,因为索引区间为空。

lst = ['1', '2', '3', '4', '1']
# index(element):返回指定元素的索引
print(lst.index('1'))
# index(element, index):返回限定位置上的指定元素的索引
print(lst.index('1', 4))
# index(element, start, stop):返回限定位置区间上的指定元素的索引
print(lst.index('1', 1, 5))
0
4
4


2. 切片

  切片是指获取序列中的子序列,是访问序列中的多个元素的一种方式,其结果是原序列片段的拷贝

  list[start=0:stop=-1:step=1],就是将整数序列range(start,stop,step)作为从原序列所取元素的索引,获取并拷贝这些元素,然后返回一个具有新id的子序列。
  其参数默认值与range类似。特别的,若startstop负数索引,则先转化为正数索引,再遵循range对应。

lst = [1, 2, 3, 4, 5, 6]
print(lst[1:5:2], lst[1:-1:2])
print(id(lst), id(lst[1:5:2]))# 第一个冒号不能省略,第二个可以省略
print(lst[1:5], lst[1::2], lst[:5:2])
print(lst[1:], lst[:5], lst[::2])
[2, 4] 				 [2, 4]
1383891593536 1383891563392[2, 3, 4, 5] 		 [2, 4, 6] 			 [1, 3, 5]
[2, 3, 4, 5, 6] 	 [1, 2, 3, 4, 5] 	 [1, 3, 5]


3. 序列加

  同类型的序列之间可以进行序列加运算+,即:将后一个序列的元素依次添加前一个序列里。

lst = list([1, 2])
print(lst + lst)
[1, 2, 1, 2]


三、元素的增删改

1. 添加元素

  • append(element)函数:在列表末尾添加一个元素
  • extend(iterable)函数:在列表末尾依次添加一个组合内的元素
  • insert(index, element)函数:在指定索引插入一个元素,后续元素索引+1.

  上述的函数没有返回值,也就是说它们的操作是在原列表上进行的,但列表的id仍会改变。

  序列加赋值运算+=可以替代extend()函数,但列表没有被分配-=运算。

lst = list([1, 2])
# 不能将组合内的元素加入列表
lst.append([3])
print(lst)# 集合是无序组合,添加次序遵循特殊的哈希映射
lst.extend({5, 4})
print(lst)# 也可以简化为赋值运算
lst += (7, 8)  # 元组,一种序列,属于组合类型
print(lst)# 负数索引视为正数索引输入
lst.insert(-7, '0')
print(lst)
[1, 2, [3]]
[1, 2, [3], 4, 5]
[1, 2, [3], 4, 5, 7, 8]
['0', 1, 2, [3], 4, 5, 7, 8]


2. 删除元素

  • remove(element)函数:删除一个指定元素,若存在重复元素,取最小正数索引。
  • pop(index=-1)函数:删除一个指定索引上的元素,参数默认值为-1.
  • clear()函数:清空列表中的所有元素
  • del语句:删除一个指定索引上的元素,也可以删除指定切片范围内的元素,甚至删除列表本身
lst = list([1, 2, 3, 4, 5])
lst.remove(5)
print(lst)lst.pop(0)
print(lst)
lst.pop()
print(lst)lst.clear()
print(lst)lst = list([1, 2, 3, 4, 5])
del lst[0]
print(lst)del lst[1:]
print(lst)del lst
print(lst)
[1, 2, 3, 4]
[2, 3, 4]
[2, 3]
[][2, 3, 4, 5]
[2]
NameError: name 'lst' is not defined.


3. 更改元素

  列表元素的更改主要通过索引查询切片替换,它们的功能与上述的添加和删除有所重叠。

  索引查询不仅能获取指定索引上的元素的值,也可以对它进行修改;切片替换可将切片内的元素依次替换为一个组合内的元素。当切片步长为1时,组合的元素数量不受限制;否则,切片的元素个数须等于组合的元素个数

lst = list([1, 2, 3, 4, 5])
# 逐个修改
lst[0] = 0
print(lst)# 批量修改
lst[1:3] = [10, 20, 30, 40]
print(lst)# 批量删除
lst[1:5] = []
print(lst)# 跳跃替换
lst[::2] = 'ab'
print(lst)
[0, 2, 3, 4, 5]
[0, 10, 20, 30, 40, 4, 5]
[0, 4, 5]
['a', 4, 'b']


四、排序

  sort(reverse=False)是一个无返回值函数,参数默认值为升序排列,可以对列表内的元素进行排序。对于基本数据类型的元素,数值类型可以互相排序,字符串不能与数值排序
  sorted(reverse=False)与前者的区别在于,它可以对任意组合内的元素进行排序,并返回一个排序后的列表

  对于值的大小相同,但类型不同的数值,遵循int < float < bool
  字符串的比较将在后续篇章说明,排序算法则在进阶篇中展开。

lst = [0, 1, 1.0, True, 2]
# 升序排列
lst.sort()
print(lst)# 降序排列
print(sorted(lst, reverse=True))
[0, 1, 1.0, True, 2]
[2, 1, 1.0, True, 0]


五、列表生成式

  生成式是for遍历的缩简语句,用于快速生成组合,格式为:[运算式 for 变量 in 可迭代对象],即:遍历可迭代对象,将其每个元素经运算后的结果加入所生成的组合中。

print([i**2 for i in range(5)])
[0, 1, 4, 9, 16]

相关文章:

Python基础学习笔记(六)——列表

目录 一、一维列表的介绍和创建二、序列的基本操作1. 索引的查询与返回2. 切片3. 序列加 三、元素的增删改1. 添加元素2. 删除元素3. 更改元素 四、排序五、列表生成式 一、一维列表的介绍和创建 列表&#xff08;list&#xff09;&#xff0c;也称数组&#xff0c;是一种有序、…...

帝国CMS跳过选择会员类型直接注册方法

国CMS因允许多用户组注册&#xff0c;所以在注册页面会有一个选择注册用户组的界面&#xff0c;即使网站只用了一个用户组也会出现。 如果想去掉这个页面&#xff0c;直接进入注册页面&#xff0c;那么可按以下办法修改 打开 e/class/user.php 文件 查找&#xff1a; $chan…...

【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

黑马es数据同步mq解决方案

方式一:同步调用 优点:实现简单&#xff0c;粗暴 缺点:业务耦合度高 方式二:异步通知 优点:低耦含&#xff0c;实现难度一般 缺点:依赖mq的可靠性 方式三:监听binlog 优点:完全解除服务间耦合 缺点:开启binlog增加数据库负担、实现复杂度高 利用MQ实现mysql与elastics…...

通过LLM多轮对话生成单元测试用例

通过LLM多轮对话生成单元测试用例 代码 在采用 随机生成pytorch算子测试序列且保证算子参数合法 这种方法之前,曾通过本文的方法生成算子组合测试用例。目前所测LLM生成的代码均会出现BUG,且多次交互后仍不能解决.也许随着LLM的更新,这个问题会得到解决.记录备用。 代码 impo…...

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…...

Ai速递5.29

全球AI新闻速递 1.摩尔线程与无问芯穹合作&#xff0c;实现国产 GPU 端到端 AI 大模型实训。 2.宝马工厂&#xff1a;机器狗上岗&#xff0c;可“嗅探”故障隐患。 3.ChatGPT&#xff1a;macOS 开始公测。 4.Stability AI&#xff1a;推出Stable Assistant&#xff0c;可用S…...

Android9.0 MTK平台如何增加一个系统应用

在安卓定制化开发过程中&#xff0c;难免遇到要把自己的app预置到系统中&#xff0c;作为系统应用使用&#xff0c;其实方法有很多&#xff0c;过程很简单&#xff0c;今天分享一下我是怎么做的&#xff0c;共总分两步&#xff1a; 第一步&#xff1a;要找到当前系统应用apk存…...

LabVIEW中实现Trio控制器的以太网通讯

在LabVIEW中实现与Trio控制器的以太网通讯&#xff0c;可以通过使用TCP/IP协议来完成。这种方法包括配置Trio控制器的网络设置、使用LabVIEW中的TCP/IP函数库进行数据传输和接收&#xff0c;以及处理通讯中的错误和数据解析。本文将详细说明实现步骤&#xff0c;包括配置、编程…...

C/C++运行时库与 UCRT 通用运行时库:全面总结与问题实例剖析

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI 1. 概述 在开发C/C应用程序时&#xff0c;运行时库&#xff08;Runtime Library&#xff09;是不可或缺的一部分。它们提供了一系列函数和功能&#xff0c;使得开发者能够更方便地进行编…...

【Python001】python批量下载、插入与读取Oracle中图片数据(已更新)

1.熟悉、梳理、总结数据分析实战中的python、oracle研发知识体系 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.背景说明2.环境搭建2.1 参考链接2.2 `oracle`查询测试代码3.数据请求与插入3.1 `Oracle`建表语句3.2 `Python`代码实现3.3 效果示例4.问题链…...

流形学习(Manifold Learning)

基本概念 Manifold Learning&#xff08;流形学习&#xff09;是一种机器学习和数据分析的方法&#xff0c;它专注于从高维数据中发现低维的非线性结构。流形学习的基本假设是&#xff0c;尽管数据可能在高维空间中呈现&#xff0c;但它们实际上分布在一个低维的流形上。这个流…...

区块链技术和应用

文章目录 前言 一、区块链是什么&#xff1f; 二、区块链核心数据结构 2.1 交易 2.2 区块 三、交易 3.1 交易的生命周期 3.2 节点类型 3.3 分布式系统 3.4 节点数据库 3.5 智能合约 3.6 多个记账节点-去中心化 3.7 双花问题 3.8 共识算法 3.8.1 POW工作量证明 总结 前言 学习长…...

Docker拉取镜像报错:x509: certificate has expired or is not yet v..

太久没有使用docker进行镜像拉取&#xff0c;今天使用docker-compose拉取mongo发现报错&#xff08;如下图&#xff09;&#xff1a; 报错信息翻译&#xff1a;证书已过期或尚未有效。 解决办法&#xff1a; 1.一般都是证书问题或者系统时间问题导致&#xff0c;可以先执行 da…...

猫狗分类识别模型建立②模型建立

一、导入依赖库 pip install opencv-python pip install numpy pip install tensorflow pip install keras 二、模型建立 pip install opencv-python pip install numpy pip install tensorflow pip install kerasimport os import xml.etree.ElementTree as ETimpor…...

React Native 之 ToastAndroid(提示语)(二十一)

ToastAndroid 是 React Native 提供的一个特定于 Android 平台的 API&#xff0c;用于显示简单的消息提示&#xff08;Toast&#xff09;。 两个方法&#xff1a; 1. ToastAndroid.show(message, duration, gravity) message: 要显示的文本消息。duration: Toast 的持续时间&…...

合约之间调用-如何实现函数静态调用?

合约之间的函数调用 EOA&#xff0c;external owned account&#xff0c;外部账号&#xff0c;例如metamask调用最终总是由EOA发起的合约之间的调用使得一次完整的调用成为一个调用链条 合约间调用过程 调用者须持有被调用合约的地址得到被调用合约的信息将地址重载为被调用合…...

【5.基础知识和程序编译及调试】

一、GCC概述&#xff1a;是GUN推出的多平台编译器&#xff0c;可将C/C源程序编译成可执行文件。编译流程分为以下四个步骤&#xff1a; 1、预处理 2、编译 3、汇编 4、链接 注&#xff1a;编译器根据程序的扩展名来分辨编写源程序所用的语言。根据不同的后缀名对他们进行相…...

微信小程序(路由传参)

微信小程序的路由系统和其他Web应用类似&#xff0c;主要通过页面路径和URL参数进行页面导航和数据传递。下面详细介绍微信小程序路由的基本使用方法和相关技巧。 1. 基本页面导航 1.1 配置页面路径 在微信小程序的 app.json 文件中&#xff0c;需要配置小程序的页面路径。这…...

电脑显示不出网络

你的电脑是否在开机后显示不出网络&#xff0c;或者有网络消失的现象&#xff1f;今天和大家分享我学到的一个办法&#xff0c;希望对大家有用。 分析出现这类现象的原因&#xff1a;可能是电脑网卡松动了&#xff0c;电脑中存在静电流。 解决办法&#xff1a;先将电脑关机&am…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...