【Python基础】S01E02 列表

2023-09-20 10:20:34

列表是什么

在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			# 复制方式2

my_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日
徐鸿铎
北京海淀西三旗

更多推荐

JavaEE——网络编程(TCP流编程)

文章目录一、解释什么是TCP流套接字编程二、代码实现TCP流套接字创建客户端服务器1.实现回显服务器(1)服务器对客户端响应的问题分析解决(2)回显服务器代码整体罗列2.实现回显客户端(1)回显客户端整体代码罗列(2)对代码中整体存在的小问题分析三、总结与运行结果展示一、解释什么是TCP流套接字编程在上一篇文章中,我向

51单片机4【玩转开发板】

1.开发板完全介绍1.配件2.开发板主板及板载原件1.单片机(1)注意不要装反了,凹槽的一面向上是正的(2)不要再开电的时候取下或者装上。2.单片机工作必备的外围电路1.晶振2.复位电路3.电源供电电路4.USB下载电路3.其他的外围设备(1)数码管(2)插口(3)电池(4)独立按键矩阵按键3.上电前的准备工作1.检查

服务器为什么要一直开机?

很多人在选择服务器的时候会想要省钱,然后就想要自己搭建一个服务器,其实服务器呢是需要24小时一直开机的,一般服务器的工作时间是3-5年,它们第一次开机后就会一直到机器故障淘汰才会关机哦,这是为什么呢?今天就让小编来讲一讲吧。首先我们来讲一讲服务器本身,服务器是在网络中为PC端、智能手机登提供计算应用服务的,就像服务器如

Android的View绑定实现----编译时注解实现findViewById和setOnClickListener方式

标题有点长,相信用过xUtils和ButterKnife框架的都知道啥意思,他们都可以通过注解的方式省去繁琐的findViewById和setOnClickListener代码的编写。他们2者的实现原理不一样,前者用的是运行时注解,后者用的是编译时注解,对于不同的注解,会有不同的注解处理器,针对运行时注解会采用反射机制

Java高级-反射

目录认识反射、获取类反射(Reflection)反射可进行的操作加载类,获取类的字节码:Class对象获取对象的三种方法获取构造器对象并使用获取构造器的方法获取构造器的作用获取成员变量和方法对象并使用获取类的成员变量的方法获取类的成员变量的作用获取成员方法的方法获取成员方法的作用认识反射、获取类反射(Reflectio

JVM--Java类加载器笔记

Java类加载器代码经过编译变成了字节码打包成Jar文件。让JVM去加载需要的字节码,变成持久代/元数据区上的Class对象,接着执行程序逻辑。类声明周期和加载过程步骤:加载->链接(校验->准备->解析)->初始化->使用->卸载加载:根据明确知道的class完全限定名,来获取二进制classfile格式的字节流(找

算法讨论题 —— Java实现两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次。示例给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]解答这个题目的原题是在:力扣(Leet

Zookeeper分布式锁的概念及原理

文章目录1.Zookeeper分布式锁的概念2.分布式锁的实现方式3.Zookeeper分布式锁的原理1.Zookeeper分布式锁的概念分布式锁的概念图如下:一种演变过程。在我们进行单机应用程序开发时,往往会涉及到并发同步的问题,一般都会采用synchronized或者Lock锁的方式来解决多线程间的代码同步问题,这

EM3DANI包详解:使用Julia语言进行3D频域电磁数据建模的终极指南

第一部分:EM3DANI包的简介与安装1.EM3DANI包简介EM3DANI是一个强大的工具包,专门为那些希望使用Julia语言进行频域电磁(CSEM和MT)数据的3D建模的研究者和开发者设计。它支持各向同性和各向异性建模,使得用户可以更加灵活地进行电磁数据的模拟和分析。频域电磁(CSEM和MT)技术在地球物理勘探、矿

Leetcode.2826 将三个组排序

题目链接Leetcode.2826将三个组排序rating:1721题目描述给你一个下标从000开始长度为nnn的整数数组numsnumsnums。从000到n−1n-1n−1的数字被分为编号从111到333的三个组,数字iii属于组nums[i]nums[i]nums[i]。注意,有的组可能是空的。你可以执行以下操作

[C语言]栈与队列——喵喵队,冲冲冲

宝子,你不点个赞吗?不评个论吗?不收个藏吗?最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!喵喵喵,你对我真的很重要。目录前言栈栈的实现队列队列的实现总结前言实践,实践,实践,多练几遍力扣,牛客的题。落实到脚下。栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作

热文推荐