【Python基础】S01E02 列表

S01E02列表

  • 列表是什么
  • 列表的操作
    • 修改、添加和删除元素
    • 列表排序
    • 列表倒序
    • 列表长度
    • 遍历整个列表
  • 数值列表
    • 创建数值列表
    • 数值列表简单统计计算
    • 列表推导式
  • 列表切片
  • 复制列表

列表是什么

在Python中,用方括号([ ])表示列表,用逗号分隔其中的元素。

bicycles = ['trek','cannon','redline','specialized']
print(bicycles)>>> ['trek', 'cannon', 'redline', 'specialized']
bicycles = ['trek','cannon','redline','specialized']
for i in bicycles:print(i)>>> trek
cannon
redline
specialized

知识自查:第一个列表元素的索引是 0,而不是 1 ;

bicycles = ['trek','cannon','redline','specialized']
print(bicycles[0])		# 打印列表中第一个元素
print(bicycles[-1])		# 打印列表中最后一个元素>>> trek
>>> specialized

提高:与 format 结合;

bicycles = ['trek','cannon','redline','specialized']
message = f"My first bicycle was a {bicycles[1].title()}"
print(message)>>> My first bicycle was a Cannon

列表的操作

修改、添加和删除元素

修改元素:

修改列表元素指定列表名称以及修改的元素的索引值,再附上修改该索引位置的新值;

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles[0] = 'ducati'		# 0 称为索引值(即位置)
print(motorcycles)>>> ['ducati', 'yamaha', 'suzuki']

添加元素:

添加元素最简单的方式是将元素追加(append)到列表的末尾;

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.append('ducati')
print(motorcycles)>>> ['honda', 'yamaha', 'suzuki', 'ducati']

当然,也可以使用 insert() 方法在列表的任意位置添加新元素,为此,我们需要指定新元素添加位置的索引以及添加的值;

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(1, 'ducati')
print(motorcycles)>>> ['honda', 'ducati', 'yamaha', 'suzuki']

insert() 中索引的概念是要插入到的位置,insert(1, 'ducati') 即要在列表中将 “ducati” 插入为第二个元素;

删除元素:

如果知道要删除的元素在列表中的位置,可以直接使用 del 函数删除:

motorcycles = ['honda', 'yamaha', 'suzuki']
del motorcycles[1]
print(motorcycles)>>> ['honda', 'suzuki']

如果要删除末尾元素,可使用 pop() 函数,且 pop() 函数会返回删除的元素值;

motorcycles = ['honda', 'yamaha', 'suzuki']
popped_motorcycles = motorcycles.pop()
print(motorcycles)
print(popped_motorcycles)>>> ['honda', 'yamaha']
>>> suzuki

但是实际上,pop(index) 函数中 index 可以指定索引位置,也可以删除指定索引的元素;

motorcycles = ['honda', 'yamaha', 'suzuki']
popped_motorcycles = motorcycles.pop(1)
print(motorcycles)
print(popped_motorcycles)>>> ['honda', 'suzuki']
>>> yamaha

如果不知道要删除的值在列表中的位置,使用 remove() 函数方法;

motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.remove('yamaha')
print(motorcycles)>>> ['honda', 'suzuki']

知识自查:remove() 函数方法只会删除第一个符合指定的值,如果要删除列表中所有符合标准的值,则需要使用循环。


列表排序

sort() 排序

Python 提供 sort() 方法可以轻松的对列表进行排序;

cars = ['bmw', 'audi', 'toyota', 'volvo']
cars.sort()
print(cars)>>> ['audi', 'bmw', 'toyota', 'volvo']

默认按照字母顺序对列表进行排序,当然也可以选择按照字母相反的顺序;

cars = ['bmw', 'audi', 'toyota', 'volvo']
cars.sort(reverse=True)
print(cars)>>> ['volvo', 'toyota', 'bmw', 'audi']

当然,我最爱 Volvo ~

sorted() 临时排序

sort() 方法会彻底改变排序,但是如果我们想要保留原来的排序顺序,而呈现出按字母大小排序,可使用 sorted() 函数;

cars = ['bmw', 'audi', 'toyota', 'volvo']
print(sorted(cars))
print(cars)>>> ['audi', 'bmw', 'toyota', 'volvo']
>>> ['bmw', 'audi', 'toyota', 'volvo']

列表倒序

如果无需排序,只要反向列表初始的顺序,reverse() 函数可以满足于你;

cars = ['bmw', 'audi', 'toyota', 'volvo']
cars.reverse()
print(cars)>>> ['volvo', 'toyota', 'audi', 'bmw']

列表长度

使用 len() 函数可快速获悉列表的长度;

cars = ['bmw', 'audi', 'toyota', 'volvo', 'benz', 'RR']
print(len(cars))>>> 6

遍历整个列表

使用循环遍历一个列表的所有内容;

magicians = ['alice','david','carolina']
for magician in magicians:print(f'{magician.title()}, that was a good trick!')>>> Alice, that was a good trick!
David, that was a good trick!
Carolina, that was a good trick!

建议: 在使用列表遍历时,建议对单个列表元素起有意义的名称,比如 cat 对应 cats 列表等。如此单数复数的命名约定有助于理解 for 循环对每个元素执行的操作。


数值列表

创建数值列表

range(a,b)

Python中的函数 range() 可以轻松的生成一系列的数;

for value in range(1,5):print(value)>>> 1
2
3
4

range(1,5) 代表 [1,5);

range(a,b,length)

range() 函数还可以指定步长,即第三个参数 length;

for value in range(1,5,2):print(value)>>> 1
3

(1,5,2) 中 2 代表“步长”,而所谓“步长”,即每一步的长度,故 value 包含两个值:1;1+2=3;

创建数值列表

要创建数值列表,可使用 list() 函数与 range() 函数的组合,list() 函数直接将 range() 的结果转换为列表;

numbers = list(range(1,5))
print(numbers)>>> [1, 2, 3, 4]

数值列表简单统计计算

所谓简单统计计算,即最大值(max)、最小值(min)、求和(sum);

digits = [1,2,3,4,5,6,7,8,9,0]
print(max(digits))
>>> 9
print(min(digits))
>>> 0
print(sum(digits))
>>> 45

列表推导式

e . g . e.g. e.g. 简单介绍

squares = [value**2 for value in range(1,11)]
print(squares)>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表推导式将 for 循环和创建新元素的代码合并成一行,并自动追加新元素;但是虽然列表推导式可以将三四行代码写到一行,其缺陷也是相当明显的,即会增大代码理解难度。


列表切片

返回列表的第 2~4 个元素;

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])>>> ['martina', 'michael', 'florence']

返回列表的前 4 个元素、最后两个元素;

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
print(players[-2:])>>> ['charles', 'martina', 'michael', 'florence']
>>> ['florence', 'eli']

返回列表第 1、3、5 名;

players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[::2])>>> ['charles', 'michael', 'eli']

复制列表

复制列表踩坑,复制方式不同结果不同;

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods_1 = my_foods[:]		# 复制方式1
friend_foods_2 = my_foods			# 复制方式2my_foods.append('cannoli')
friend_foods_1.append('ice cream')
friend_foods_2.append('noodles')print(my_foods)
print(friend_foods_1)
print(friend_foods_2)>>> ['pizza', 'falafel', 'carrot cake', 'cannoli', 'noodles']
['pizza', 'falafel', 'carrot cake', 'ice cream']
['pizza', 'falafel', 'carrot cake', 'cannoli', 'noodles']

观察;

# 复制方法1 是将值复制给一个名称为 friend_foods_1、有自己内存空间地址的变量中;
friend_foods_1 = my_foods[:]
# 复制方法2 变量 friend_foods_2 内存空间地址指向 my_foods,没有自己的空间地址;
friend_foods_2 = my_foods

2023年9月20日
徐鸿铎
北京海淀西三旗

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

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

相关文章

基于Java的Base64编解码优化探讨

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示: 2.输入“svn”,再按回车,如下图: 3.这我选择的是 Subversive,点击后面的“install”按钮,如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…

java面向对象(八)

文章目录 一、abstract关键字的使用1.概念2. abstract修饰类:抽象类3.abstract修饰方法,抽象方法4.abstract使用上的注意点:5.抽象类的匿名子类 二、计算一段代码执行所花费的时间三、接口的使用1.接口的使用2.定义接口中的成员3.代码demo4.Java类可以实…

uniapp:APP开发,后台保活

前言: 在ios中,软件切换至后台、手机息屏,过了十来秒软件就会被系统挂起,APP内的任务就不能继续执行;在android中,默认情况下,软件在后台运行的时候,触发某些特定条件的情况下&…

高性能实践

1、认识性能 从用户体验来看,性能就是响应时间短; 从开发角度来看,性能主要是执行效率高。 性能主要表现形式如下: (1)响应时间,AVG、MAX、MIN、TP95、TP99 (2)吞吐…

物联网网关:连接设备与云端的桥梁

物联网网关作为连接设备与云端的桥梁,承担着采集数据、设备远程控制、协议转换、数据传输等重要任务。物联网网关是一种网络设备,它可以连接多个物联网设备,实现设备之间的数据传输和通信。物联网网关通常具有较高的网络带宽和处理能力&#…

浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

浙江大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作——2023学生开学季辉少许

代码随想录算法训练营第一天(C)| 704. 二分查找 27. 移除元素

文章目录 前言一、704. 二分查找二、27. 移除元素三、34. 在排序数组中查找元素的第一个和最后一个位置总结 前言 这次是C; 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素_愚者__的博客-CSDN博客 (java) 一、704. 二分查找 的优…

【Java 基础篇】Java线程安全与并发问题详解

多线程编程在Java中是一个常见的需求,它可以提高程序的性能和响应能力。然而,多线程编程也带来了一系列的线程安全与并发问题。在本文中,我们将深入探讨这些问题,以及如何解决它们,适用于Java初学者和基础用户。 什么…

RabbitMQ消息可靠性(二)-- 消费者消息确认

一、消费者消息确认是什么? 在这种机制下,消费者在接收到消息后,需要向 RabbitMQ 发送确认信息,告知 RabbitMQ 已经接收到该消息,并已经处理完毕。如果 RabbitMQ 没有接收到确认信息,则会将该消息重新加入…

在visual studio里安装Python并创建python工程

在2009年,云计算开始发力,Python、R、Go这些天然处理批量计算的语言也迅猛发展。微软在2010年,把Python当成一个语言包插件,集成到了visual studio 2010里。在"云优先,移动优先"的战略下,于2015年…

如何在 Excel 中进行加,减,乘,除

在本教程中,我们将执行基本的算术运算,即加法,减法,除法和乘法。 下表显示了我们将使用的数据以及预期的结果。 | **S / N** | **算术运算符** | **第一个号码** | **第二个号码** | **结果** | | 1 | 加法(&#xff…

【Redis】深入探索 Redis 的哨兵(Sentinel)机制原理,基于 Docker 模拟搭建 Redis 主从结构和哨兵分布式架构

文章目录 一、对 Redis Sentinel 的认识1.1 什么是 Redis Sentinel1.2 为什么要使用 Redis Sentinel1.2.1 主从复制问题1.2.2 人工恢复主节点故障 二、Redis Sentinel 原理剖析2.1 Redis Sentinel 架构2.2 Raft 算法和领袖节点2.3 哨兵节点2.4 故障检测2.5 故障切换2.6 监控和通…

MybatisMybatisPlus 操作 jsonb 格式数据

最近有用到postgresql&#xff0c;里面的一个特色数据类型便是jsonb&#xff0c;和json差不多&#xff0c;但是查询比较快&#xff0c;关于概念&#xff0c;这里就提一句&#xff0c;不赘述。 我们先来看下用mybatisplus&#xff0c;首先是查询数据。 依赖&#xff1a; <d…

【MySQL】 MySQL的增删改查(进阶)--壹

文章目录 &#x1f6eb;数据库约束&#x1f334;约束类型&#x1f38b;NOT NULL约束&#x1f38d;UNIQUE&#xff1a;唯一约束&#x1f333;DEFAULT&#xff1a;默认值约束&#x1f384;PRIMARY KEY&#xff1a;主键约束&#x1f340;FOREIGN KEY&#xff1a;外键约束&#x1f…

8.idea 使用 docker 构建 java web 项目

docker 构建 java web 项目 和 docker 构建 spring boot 项目&#xff0c;除了 Dockerfile 不同&#xff0c;其他是都一样的。其他步骤参考&#xff1a;idea 使用 docker 构建 spring boot 项目&#xff0c;构建 Java Web 项目的 Dockerfile示例如下&#xff1a; 因为 java web…

idea中提示:error has occurred, please check your installation and try again

目录 报错原因解决总结 报错 idea中提示&#xff1a;error has occurred, please check your installation and try again 原因 1.起初我是把一个运行正常的java程序&#xff0c;放到了src下&#xff0c;新建的一个包&#xff08;包名为java.first&#xff09;中&#xff0c…

NLP文本生成全解析:从传统方法到预训练完整介绍

目录 1. 引言1.1 文本生成的定义和作用1.2 自然语言处理技术在文本生成领域的使用 2 传统方法 - 基于统计的方法2.1.1 N-gram模型2.1.2 平滑技术 3. 传统方法 - 基于模板的生成3.1 定义与特点3.2 动态模板 4. 神经网络方法 - 长短时记忆网络(LSTM)LSTM的核心概念PyTorch中的LST…

动力节点老杜JavaWeb笔记(全)

Servlet 关于系统架构 系统架构包括什么形式&#xff1f; C/S架构B/S架构 C/S架构&#xff1f; Client / Server&#xff08;客户端 / 服务器&#xff09;C/S架构的软件或者说系统有哪些呢&#xff1f; QQ&#xff08;先去腾讯官网下载一个QQ软件&#xff0c;几十MB&#xff…

ChatGLM LoRA微调定制AI大模型

一、前言 对于 ChatGLM2-6B 模型基于 PEFT 的特定任务微调实验。 1.1 硬件需求 注:r 为LoRA 维数大小,p 为前缀词表大小,l 为微调层数,ex/s 为每秒训练的样本数。gradient_accumulation_steps 参数设置为 1。上述结果均来自于单个 Tesla V100 GPU,仅供参考。 1.2 微调方…