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

【Python】序列与列表(列表元素的增删改查,求之,列表推导式、列表的拷贝)

一、序列

序列的概念:按照某种顺序排列的数据类型就叫做序列,比如字符串,列表,元组,集合

序列的共同点是都有下标,支持index()方法和count(),也支持切片处理(等同于字符串序列的切片处理)

l1 = [0, 1, 1, 2, 3, 4, 2, 4, 5]
print(l1.index(1))
print(l1.count(1))
print(l1[:3][::-1])
print(l1[::2])

二、列表(可变类型)

列表 表达符号使用中括号 [] 里面可以是数字,字符串,布尔类型,列表,元组,字典,集合...

# 定义空列表new_empty_list = list()
print(empty_list, new_empty_list)

列表是一个有序,并且元素可以重复的和可变动的元素类型

list1 = ['Apple', 'Orange', 'Grape']
list2 = ['Orange', 'Apple', 'Grape']
if list1 == list2:print("{}和{}相等".format(list1, list2))
else:print("{}和{}不相等".format(list1, list2))

1、列表元素的删除

pop方法

pop方法可以进行删除列表中的元素,默认删除最后一个索引位置的元素,删除并同时可以返回此元素,也可以指定下标索引去删除

list1 = ['Apple', 'Orange', 'Grape']print(list1.pop())
print(list1)
print(list1.pop(0))
print(list1)

remove()方法

remove()方法是指定元素去删除;

list1 = ['Apple', 'Orange', 'Grape','Durian']list1.remove('Durian')
print(list1)

del

也可以通过指定对应的下标元素值去删除 也可以针对变量进行删除 删除后就会报变量未定NameError: name 'xxxx' is not defined

list1 = ['Apple', 'Orange', 'Grape','Durian']del list1[1]
print(list1)

clear()方法

clear()方法是清空列表;

list1 = ['Apple', 'Orange', 'Grape','Durian']list1.clear()
print(list1)


2、列表元素的增加

1、append()方法

默认是添加元素到列表的末尾;

list1 = ['Apple', 'Orange', 'Grape']list1.append('Pear')
print(list1)

2、insert()方法 指定索引位置,在索引前面一个位置插入

list1 = ['Apple', 'Orange', 'Grape']list1.insert(1, 'Cherry')
print(list1)

3、extend()方法 是可以跟其他序列进行拼接 相当于+拼接

list1 = ['Apple', 'Orange', 'Grape']list3 = ['watermelon']
string1 = 'test'
list1.extend(list3)
print(list1)
print(list1 + list3)

# 字符串如果被使用这个extend方法添加到列表中,则先会把字符串拆分成列表,然后添加进去

list1 = ['Apple', 'Orange', 'Grape']list1.extend(string1)
print(list1)

3、列表元素的获取

list1 = ['Apple', 'Orange', 'Grape']
list2 = ['Orange', 'Apple', 'Grape']print(list1[-1], list1[2])

列表长度的获取

num_list = [1, 2, 3, 4, 5,]
print(len(num_list))
有几个元素,列表长度就为几

4、列表元素的修改

list2 = ['Orange', 'Apple', 'Grape']list1[2] = 'Durian'
print(list1)

5、列表元素的排序

sort()方法

sort()方法可以实现对列表元素进行排序 按照默认的由低到高的顺序排序;

num_list = [2, 1, 6, 3, 7, 9]
num_list.sort()
print(num_list)alpha_list = ['b', 'd', 'w', 'x', 'a', 'c']
alpha_list.sort()
print(alpha_list)

# # sort()方法的reverse参数可以实现反向输出,默认不加的话就是reverse=False(也就是关闭了反向输出),如果需要指定则照如下方式使用

num_list = [2, 1, 6, 3, 7, 9]
num_list.sort()
print(num_list)num_list.sort(reverse=True)
print(num_list)

reverse()方法

reverse()方法可以实现将列表元素反向输出;

num_list = [2, 1, 6, 3, 7, 9]num_list.reverse()
print(num_list)

总结:列表元素的反向输出有三种办法

list1 = ['Apple', 'Orange', 'Grape']
list2 = ['Orange', 'Apple', 'Grape']
num_list = [2, 1, 6, 3, 7, 9]# 1) 列表切片实现
print(num_list[::-1])
# 2)  reverse()方法
print(list2)
list2.reverse()
print(list2)
# 3) reversed()内置函数 返回序列给定的值的一个反向的迭代器 如果需要输出对应的数据类型 则需要使用对应的数方法进行转化
print(list(reversed(list2)))

6、列表元素的去重

not in

对num_list进行去重;

num_list = [1, 2, 3, 4, 5, 5, 4, 3]
empty_list = []
for i in num_list:if i not in empty_list:empty_list.append(i)
print(empty_list)


7、 列表元素的求值

列表元素的求和

digit_list = [3, 4, 5, 6]# 1) for循环求和
for_total = 0
for i in digit_list:for_total += i
print(for_total)
digit_list = [3, 4, 5, 6]# 2) while循环求和
while_total = 0
i = 0
while i < len(digit_list):while_total += digit_list[i]i += 1
print(while_total)
# 3) 使用sum函数实现
print(sum(digit_list))

列表元素的最大值,最小值

# 求列表最大值 求平均值的  求最小值的digit_list = [3, 4, 5, 6]
print(max(digit_list))
print(min(digit_list))

列表元素的平均值

# 1) statistics module,其中包含一个内置函数来计算数字的平均值或平均值statistics.mean() functio用于计算输入值或数据集的平均值/平均值。


digit_list = [3, 4, 5, 6]from statistics import mean
print(mean(digit_list))

# 2) 先求和再求平均值

digit_list = [3, 4, 5, 6]print(sum(digit_list) / len(digit_list))

# 3) NumPy 模块有一个内置函数来计算数据集或列表中存在的数据项的平均值/平均值。

digit_list = [3, 4, 5, 6]import numpy
print(numpy.average(digit_list))

8、 列表推导式/列表生成式

# 使用普通for循环创建一个1-10的一个列表

slist = []
for i in range(1,11):slist.append(i)
print(slist)

# 列表推导式语法:[exp1 for x in data if condition]

print([x*x for x in range(1, 11)])
print(sum([i for i in range(1,11)]))

9、列表的拷贝

浅拷贝

# 浅拷贝 深拷贝 针对可变序列 面试重点知识 需要记忆
"""
copy()方法是浅拷贝(shallow copy) 如果一个可变序列是多层次嵌套的值,则浅拷贝因为是浅层次的拷贝,所以拷贝后的对象浅层次的值不会随着之前的源对象
值改变而改变,而深层次的嵌套的值因为浅拷贝无法拷贝过去,也就是说拷贝的是源数据的一个引用,因此如果我们修改浅层次的数据,源数据不会更改,深层次数据
修改后,源数据也会修改 可以理解为深层次的数据是做了个软链接
"""
list3 = [1, 2, 3, ['a', 'b', 'c'], 5]
list4 = list3.copy()
print(id(list3), id(list4))
list4[0] = 0
list4[-2][0] = 'a1'
print(list3)
print(list4)
浅拷贝,不是完整的拷贝,他只能拷贝第一层的元素;

如果你是多层列表的话,他只能拷贝第一层元素,第二层元素他并没有拷贝,相当于做了一个引用,并不是真的拷贝走了,所以你在修改浅拷贝列表的第二层元素的时候,相当于在原列表上修改了;

# 这里发现浅拷贝深层次的子列表对象的内存地址值id是完全一样的 说明深层次只是做了个引用 无法实现创建新对象

print(id(list3[-2]))
print(id(list4[-2]))

深拷贝

list5 = deepcopy(list3)
print(list5)
list5[0] = 9
list5[3][1] = 'bag'
print(list3)
print(list5)
深拷贝,他就是完整的拷贝;

如果是多层列表的话,就拷贝走了整个列表,相当于创建了一个新的完整的的列表,所以你在新的列表上进行修改,是不会影响到原列表的;

# 这里发现深拷贝的深层次的子列表对象的内存地址值id是完全不一样的 说明实现创建了新对象

print(id(list3[-2]))
print(id(list5[-2]))

相关文章:

【Python】序列与列表(列表元素的增删改查,求之,列表推导式、列表的拷贝)

一、序列序列的概念&#xff1a;按照某种顺序排列的数据类型就叫做序列&#xff0c;比如字符串&#xff0c;列表&#xff0c;元组&#xff0c;集合序列的共同点是都有下标&#xff0c;支持index()方法和count()&#xff0c;也支持切片处理(等同于字符串序列的切片处理)l1 [0, …...

update导致死锁

update delete 操作&#xff0c;如果走的索引&#xff0c;对索引和主键索引加行锁 如果没有走索引&#xff0c;锁整张表。 不开启事务&#xff0c;mysql本身也会加锁 一般MYSQL在执行CREATE,ALTER,INSERT等命令时会自动加锁 在对数据进行更新操作时 如果update没用到索引&…...

Java 集合 --- 如何遍历Map

Java 集合 --- 如何遍历MapMap的基本操作如何遍历MapType of HashMapMap没有继承Collection接口AbstractMap和AbstractCollection是平级关系 Map的基本操作 package map; import java.util.*; /*** This program demonstrates the use of a map with key type String and val…...

C#从值类型、引用类型到装箱和拆箱

上一篇文章讲了C#的值类型和引用类型&#xff0c;这里再来看看值类型和引用类型最直接的使用场景&#xff1a;装箱和拆箱。 一、基本概念 装箱&#xff1a;值类型转化为引用类型的过程。从托管堆中为新生成的引用类型对象分配内存,再把值类型的实例字段拷贝到托管堆上新对象的…...

Java中的逻辑运算符/移位运算符简单总结

前段时间刷到了力扣关于位运算的题&#xff0c;这里浅浅记录一下&#xff01; 1. 逻辑位运算 1.1 与 & &&#xff1a;按位与进行二进制计算&#xff0c;规则是同为1则为1&#xff0c;不同为0&#xff0c;具体如下&#xff1a; 0&00, 0&10, 1&00, 1&…...

活动预告 | GAIDC 全球人工智能开发者先锋大会

大会主题——“向光而行的 AI 开发者” 2023 全球人工智能开发者先锋大会&#xff08;GAIDC&#xff09; 由世界人工智能大会组委会、上海市经济和信息化委员会、上海市人才工作领导小组办公室及中国&#xff08;上海&#xff09;自由贸易试验区临港新片区管理委员会指导&…...

【Linux系统】认识操作系统和操作系统如何进行管理以及进程相关状态

进程概念1 认识冯诺依曼体系结构1.1 冯诺依曼体系结构存储器的作用2 操作系统(Operator System&#xff0c;OS)2.1 OS如何进行管理3 进程3.1 OS管理进程&#xff1a;先描述再组织3.2 描述进程-PCB3.3 查看进程3.4 通过系统调用获取进程标识符3.5 通过系统调用创建子进程——for…...

【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…...

SpringBoot 整合定时任务

注解概览 EnableScheduling 在配置类上使用&#xff0c;开启计划任务的支持&#xff08;类上&#xff09; Scheduled 来申明这是一个任务&#xff0c;包括cron,fixDelay,fixRate等类型&#xff08;方法上&#xff0c;需先开启计划任务的支持&#xff09; pom依赖 <parent…...

我的零分周赛:CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果、圆桌

CSDN周赛第30期&#xff0c;成绩“0”分&#xff0c;天然气定单、小艺读书、买苹果&#x1f34e;、圆桌。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教…...

二、Java虚拟机的基本结构

Java虚拟机的架构1.内存结果概述2.类加载器子系统的作用3. 类加载器ClassLoader角色4.类的加载过程5.类加载器的分类1.引导类加载器(虚拟机自带的加载器)Bootstrap ClassLoader2.扩展类加载器(虚拟机自带的加载器) Extenssion ClassLoader3.应用程序类加载器(虚拟机自带的加载器…...

华为OD机试 - 用户调度(Python) | 机试题+算法思路+考点+代码解析 【2023】

用户调度 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。 假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。 不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。 规则是: …...

HashMap(JDK1.8)源码+底层数据结构分析

HashMap 简介底层数据结构分析 JDK1.8 之前JDK1.8 之后 HashMap 源码分析 构造方法put 方法get 方法resize 方法 HashMap 常用方法测试 感谢 changfubai 对本文的改进做出的贡献&#xff01; HashMap 简介 HashMap 主要用来存放键值对&#xff0c;它基于哈希表的 Map 接口实现…...

case的使用

1.x和z值 1.1.定义 x&#xff1a;表示不定值 z&#xff1a;表示高阻态&#xff0c;还有一种表达方式“&#xff1f;” 一个x/z可以用来定义十六进制&#xff08;h&#xff09;数的4位二进制的状态&#xff0c;八进制&#xff08;o&#xff09;数的3位&#xff0c;二进制&#x…...

Mac配置ITerm2

Mac配置ITerm2 install-shell-integration配置lrzsz配置zsh安装Oh-My-Zsh修改皮肤文件加载皮肤添加插件配置profiles 1.expect配置文件2.shell脚本 iterm2顶部白条闪烁 install-shell-integration 安装完成之后会有一个指示标&#xff0c;需要弄掉Preferences > Profiles …...

JUC并发编程(下)

✨作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 学习地址 写在最前 JUC并发编程&#xff08;上&#xff09; JUC&#xff08;Java Util Concurrent&#xff09;学习内容框架&…...

API接口的基础知识

API是应用程序编程接口&#xff08;Application Programming Interface&#xff09;的缩写&#xff0c;能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议&#xff0c;来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…...

基于Spring Boot的教务管理系统

文章目录项目介绍主要功能截图&#xff1a;登录首页学生信息管理班级信息管理教师信息管理教师评价部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题…...

网页扫描图像并以pdf格式上传到服务器端

本文描述如何通过网页驱动扫描仪、高拍仪等图像扫描设备进行图像扫描&#xff0c;扫描结果经编辑修改后以pdf压缩格式上传到后台java程序中进行服务器端落盘保存。图像扫描上传如文字描述顺序所介绍&#xff0c;先要驱动扫描设备工作&#xff0c;进行纸张数据的光学扫描操作形成…...

Airbyte入门

Airbyte 后端技术栈Java 17框架&#xff1a;JerseyAPI&#xff1a; OAS3数据库&#xff1a;PostgreSQL单元和E2E测试&#xff1a;JUnit 5编排&#xff1a;Temporal连接器技术栈连接器可以用任何语言编写。但是&#xff0c;最常见的语言是&#xff1a;Python3.9.0Java 17前端技术…...

用PyTorch复现FactorVAE:一个能同时预测收益和风险的量化模型实战教程

用PyTorch实战FactorVAE&#xff1a;构建收益与风险双预测的量化模型 在量化投资领域&#xff0c;传统线性因子模型正逐渐被非线性机器学习方法所取代。然而金融数据特有的低信噪比特性&#xff0c;使得直接从市场数据中提取有效因子成为一项艰巨挑战。本文将深入探讨如何利用P…...

国产麒麟系统上编译GDAL 3.2.1踩坑记:从PROJ6依赖缺失到Qt环境集成

麒麟系统GDAL 3.2.1编译实战&#xff1a;PROJ6依赖修复与Qt工程深度集成在国产操作系统生态中部署地理数据处理工具链&#xff0c;往往会遇到比常规Linux发行版更复杂的依赖问题。最近在麒麟系统上为北斗定位项目编译GDAL 3.2.1时&#xff0c;遭遇了经典的"PROJ 6 symbols…...

使用curl命令调试Taotoken API接口的常见问题排查

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用curl命令调试Taotoken API接口的常见问题排查 基础教程类&#xff0c;面向所有需要通过HTTP直接与API交互的开发者&#xff0c…...

AI算法工程师必学的Python库:这10个库,AI开发必备

对于软件测试从业者来说&#xff0c;随着人工智能技术在测试领域的渗透越来越深——从自动化测试用例生成到缺陷智能预测&#xff0c;从测试结果分析到测试环境智能化调度&#xff0c;掌握AI开发的核心工具链已经成为从功能测试向AI测试开发、智能化测试转型的核心竞争力。Pyth…...

ESP32搭建TFT_LCD中文字库,附常用字库

&#xff08;一&#xff09;简介 在使用ESP32的时候&#xff0c;我们知道OLED屏幕是有中文库的&#xff0c;里面有非常多的常用字&#xff0c;但是LCD屏幕只有取模才能得到中文字体&#xff0c;那我们本期教程就来教大家如何搭建自己的字体库&#xff0c;使用中文字体更加方便快…...

终极免费解决方案:如何用Neat Bookmarks拯救你混乱的Chrome书签

终极免费解决方案&#xff1a;如何用Neat Bookmarks拯救你混乱的Chrome书签 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 还在为满屏混乱的Chrome书…...

基于Arduino与ADXL335的自制地震预警系统:从传感器原理到多点联动实现

1. 项目概述与核心思路最近在捣鼓一个挺有意思的玩意儿——一个能自主工作的地震预警系统。这可不是什么高深莫测的科研项目&#xff0c;而是基于一些常见的电子模块&#xff0c;自己动手就能搭建起来的实用装置。它的核心目标很明确&#xff1a;当检测到建筑物出现异常振动时&…...

Flutter表单验证完全指南

Flutter表单验证完全指南 引言 表单验证是Web和移动应用中不可或缺的一部分&#xff0c;它确保用户输入的数据符合预期格式。本文将深入探讨Flutter中的表单验证技术和最佳实践。 一、表单验证基础 1.1 使用TextFormField TextFormField(decoration: const InputDecoration(lab…...

如何用WaveTools终极优化鸣潮游戏体验:从帧率解锁到抽卡分析的完整指南

如何用WaveTools终极优化鸣潮游戏体验&#xff1a;从帧率解锁到抽卡分析的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》却经常遇到帧率不稳定、画面卡顿或者抽卡记录混乱的…...

Frida Spawn与Attach模式深度解析:Android加固对抗决策指南

1. 为什么刚学Frida的人总在Spawn和Attach之间反复横跳&#xff1f; “Frida Hook跑不起来”——这是我过去三年在安全技术社区、逆向学习群、CTF训练营里听到最多的一句抱怨。但真正拆开看&#xff0c;90%的问题根本不是代码写错了&#xff0c;也不是目标App加固太强&#xff…...