python基础语法--列表

一、列表的概念

列表(List)是一种有序、可变、允许重复元素的数据结构。列表用于存储一组相关的元素,并且可以根据需要动态地进行增加、删除、修改和访问。以下是列表的主要特点和操作:

  1. 有序性: 列表中的元素是按照它们被添加到列表中的顺序进行排列的,因此列表是有序的数据结构,你可以通过索引来访问列表中的元素。

  2. 可变性: 列表是可变的,这意味着你可以随时对列表中的元素进行增加、删除或修改。这使得列表成为处理动态数据集合的理想选择。

  3. 元素类型: 列表中的元素可以是任意类型的数据,包括整数、浮点数、字符串、列表、元组、字典等。

  4. 允许重复元素: 列表中可以包含重复的元素,即使相同的元素出现多次,它们也会被分别存储在不同的位置。

二、列表的操作

Python列表的常见操作包括:

  • 访问元素: 使用索引访问列表中的特定元素,索引从0开始。
  • 修改元素: 使用索引来修改列表中特定位置的元素。
  • 增加元素: 使用 append() 方法在列表末尾添加一个元素,使用 insert() 方法在指定位置插入一个元素,或者使用 extend() 方法将另一个列表的元素添加到当前列表的末尾。
  • 删除元素: 使用 del 语句、remove() 方法或 pop() 方法删除列表中的元素。
  • 切片: 使用切片操作来获取列表的子列表。
  • 列表操作符: 使用 + 操作符进行列表的连接,使用 * 操作符进行列表的重复。
  • 列表方法: Python提供了许多列表方法,如 append()insert()remove()pop()index()count()sort()reverse() 等,用于对列表进行各种操作。

1. 创建列表

  • 使用中括号

# 创建一个空列表
L = []
# 创建一个有元素的列表
L = ['Python', 18, 3.14]

当将列表赋值给变量时,变量名不要取名为 list 或 l(小写的L),因为 list 是列表对应的类名,
小写的L容易被误读或误写为阿拉伯数字1。

  • 使用 list类的构造方法

# 创建一个空列表
L = list()

L = list(range(1, 6))

L = list(['Python', 18, 3.14])

2、访问元素

后面的举例,全部使用的是这个列表:

  • 获取指定元素的索引

如果想要获得列表中指定元素的索引,可以调用方法index,而列表中每一个元素都有两个索引,该方法只返回两个整数索引中大于0的那个索引。

L = [5,3,7,9,2,1,7,6]
print(L.index(9))    # 3

如果列表中含有多个指定元素,index方法返回的是列表第一次出现指定元素大于零的索引。

L = [5,3,7,9,2,1,7,6]
print(L.index(0))    # 2

如果列表中不含有执行元素,会直接进行报错。

调用方法index时还可以指定起始索引start和结束索引stop这两个参数。

#只指定起始索引start(不能只指定结束索引)
print(L.index(7,3))    # 6

指定索引从3之后进行查找

#只指定起始索引start和指定结束索引stop
print(L.index(7,3,5)) 
  • 通过索引获得元素

直接使用方括号+下标的方式,就可以获得下标所对应的元素

列表名[下标]
  • 使用切片获得多个元素

语法格式:

[start:stop:step]

1、得到的切片仍然是列表,是原始列表的片段的一份拷贝。
2、得到的切片不包括索引stop对应的元素。
3、如果不指定step,其默认值是1,此时语法格式可以简化为[start:stop]。
4、当step为正数时:
如果不指定start,切片的第一个元素默认是列表的第一个元素。
如果不指定stop,切片的最后一个元素默认是列表的最后一个元素。
从索引start开始以step为步长向后计算切片。
5、当step为负数时:
如果不指定start,切片的第一个元素默认是列表的最后一个元素。
如果不指定stop,切片的最后一个元素默认是列表的第一个元素。
从索引start开始以step为步长向前计算切片。

6、切片操作是允许索引越界的

print(L[:])
# [5,3,9,4,0,6,8,1,7,2]

print(L[::-1])
# [2,7,1,8,6,0,4,9,3,5]

print(L[:100])
# [5,3,9,4,0,6,8,1,7,2]
print(L[-100:])
# [5,3,9,4,0,6,8,1,7,2]

7、可以调用内置函数slice(类slice的构造方法)创建slice类型的对象
内置函数slice有三种调用方式:
1)slice(stop)
2)slice(start,stop)
3)slice(start,stop,step)
start、stop和step的默认值都是None。
slice(start,stop,step)与 start:stop:step 是等价的。

L=[5,3,9,4,0,6,8,1,7,2]
print(L[1:7:2])    # [3,4,6]
print(L[slice(1,7,2)])    # [3,4,6]
print(L[:]
# [5,3,9,4,0,6,8,1,7,2]
print(L[slice(None,None,None)])
# [5,3,9,4,0,6,8,1,7,2]
  • 使用运算符in检查是否存在指定元素

如果某个元素在列表中,返回True;如果不在,返回False;

print(5 in L) # True

还可以使用 not in 运算符检查某个元素是否存在指定元素:如果某个元素不在列表中,返回True;如果在,返回False;

3、修改元素

L = [3,4,5,6,7]
  • 通过索引修改指定元素

L[0] = 1
  • 通过切片修改元素

L = [3,4,5,6,7]

L[1:4] = [1,9,2]
print(L)
# [3,1,9,2,7]
L[1:2] = [5]
print(L)    # [3,5,9,2,7]

注意,即使通过切片修改一个值时,右边也需要使用方括号进行赋值

并且,等号两边的元素个数可以不同:

L[1:4] = [1,8]

切片[1:4]中有三个元素,而右边方括号内我只给了两个元素。

我们可以看到最终结果,不仅将原列表中的 5、9修改成为1、8,并且还把2删除了。

4、增加元素

  • 调用方法append

在原始列表的最后一个元素后面追加一个元素。

L = [3,4,5,6,7]
L.append(8)
print(L)    # [3,4,5,6,7,8]

这里还有一个小细节需要注意,append方法的返回值为None,因此不能进行链式调用:

print(L.append(8)) 
# 最终打印结果为None

append不仅能追加单独的值,还能追加列表(将列表作为一个整体进行追加):

L = [3,4,5,6,7,8]
L.append([9,10])
print(L)    # [3,4,5,6,7,8,[9,10]]

  • 调用方法extend

将所有元素依次添加到列表的末尾。

L = [3,4,5,6,7,8]
L.extend([9,10])
print(L)    # [3,4,5,6,7,8,9,10]
  • 调用方法insert

在列表的任意位置添加一个元素。

L = [3,4,5,6,7]
L.insert(3,8)
print(L)    # [3,4,5,8,6,7]

在下标为3的位置上插入一个8.

进行尾插的操作:

L = [3,4,5,6,7]
L.insert(len(L),8)
print(L)    # [3,4,5,6,7,8]
ls1 = [1, 2, 3]
ls2 = [4, 5, 6]
ls1.insert(3, ls2)
# [1, 2, 3, [4, 5, 6]]
  • 使用切片

L = [3,4,5,6]
L[2:2] = [8,9]
print(L)    # [3,4,8,9,5,6]

在下标为2的位置处,插入8,9

进行尾插操作:

L = [3,4,5,6]
L[len(L):] = [8,9]
print(L)    # [3,4,5,6,8,9]

注意,使用切片和extend增加多个元素时,右边给定的元素需要使用[]括起来;对于+= ,如果不是在最后添加一个列表,而是添加多个元素时,是不需要加[]的;并且append一次只能添加一个元素(可以是单个值,也可以是一个列表)。

5、删除元素

  • 使用remove方法

指定要删除的元素。

L = [3,4,5,6,5,7]
L.remove(4)
print(L)    # [3,5,6,5,7]

如果列表中,存在多个指定元素,只删除第一次出现的元素;

如果列表中,不存在要删除的指定元素,则直接进行报错。

返回值为None.

  • 使用pop方法

指定要删除元素的索引,并且返回索引所对应的元素。

L = [3,4,5,6,7]
print(L.pop(2)) # 5
print(L)    # [3,4,6,7]

如果给定的索引不存在,则进行报错:index error

如果不给定索引,则默认删除最后一个元素。

这里需要注意,使用pop方法给定的参数是一个索引,而remove方法的参数是要删除的数

  • 使用del方法

L=[3,4,5,6,7,8,9]
del L[2]
print(L)
# [3,4,6,7,8,9]

也可以删除一个切片:

del L[1:]
  • 给指定的切片赋值为一个空列表

L[2:5] = []
  • 将列表的所有元素删除

使用方法clear,如:

L.clear()

6、列表操作符

  • 加法操作符

L1 = [1,2,3]
L2 = [4,5,6]
L3 = L1 + L2
print(L3)
# [1,2,3,4,5,6]
print(L1)
# [1,2,3]
print(L2)
# [4,5,6]

注意,+= 操作符会修改列表本身,+操作符不会修改列表本身

L1 = L2 = [1,2]
L1 = L1 + [3,4]
print(L1,L2)
#[1,2,3,4] [1,2]


L1 = L2 = [1,2]
L1 += [3,4]
print(L1,L2)
# [1,2,3,4] [1,2,3,4]

对于第一种形式:

对于第二种形式:

  • 乘法操作符

运算规则:将列表中的元素重复n次后,生成一个新的列表,原始列表不发生变化

L1 = [1,2,3]
L = L1 * 3
print(L)
#[1,2,3,1,2,3,1,2,3]
print(L1)
#[1,2,3]

这个操作符常被用来进行初始化:

L = [0] * 5
print(L)
# [0,0,0,0,0]

同样需要注意,*= 操作符也会修改列表本身

L1 = L2 = [1,2]
L1 *= 3
print(L1,L2)
# [1,2,1,2,1,2] [1,2,1,2,1,2]

7、比较运算符

可以使用如下比较运算符对两个列表进行比较:>、>=、<、<=、==、!=,is
比较规则为:首先比较两个列表中的第一个元素,如果相等则继续比较下一个元素,依次比较下去,直到两个列表中的元素不相等时,其比较结果就是两个列表的比较结果,并且两个列表中的所有后续元素将不再被比较。

print([2,3,8,6,7] < [2,3,9,5,1])
# True
print([7,[2,6]] > [7,[2,5]])
# True

==与 is 的区别:==是“相等性“测试,is 是“同一性"测试。

a = b = [1,2,3]
c = [1,2,3]
print(a==b))
# True
print(a == c)
# True
print(a is b)
# True
print(a is c)
# False

8、反转列表和排序列表

反转列表:

  • 使用reverse方法

L = [1,2,3,4,5]
L.reverse()
print(L)
# [5,4,3,2,1]
  • 使用内置函数reversed

内置函数reversed的返回值是一个迭代器对象,并且原列表不发生变化

L = [1,2,3,4,5]
iterator reversed(L)
print(iterator) <list_reverseiterator object at 0x101fb4c18>
print(list(iterator))
#[5,4,3,2,1]
print(L)
#[1,2,3,4,5]


排序列表:

  • 使用sort方法

默认按照从小到大的顺序进行排序。

L=[5,3,8,1,6]
L.sort()
print(L)
# [1,3,5,6,8]

调用方法sort时,可以指定参数reverse=True,从而按照逆序进行排序。

L.sort(reverse True)
print(L)
# [8,6,5,3,1]

同样需要注意的是,sort方法的返回值也是None,不能进行链式调用。

  • 使用内置函数sorted()

L=[5,3,8,1,6]
print(sorted(L))    # [1,3,5,6,8]
print(L)    # [5,3,8,1,6]

内置函数sorted的返回值是排序后生成的新列表,且被排序的列表不发生变化

调用内置函数sorted时,可以指定参数reverse=True,从而按照逆序进行排序。

三、列表生成式

如果想要生成列表[1,4,9,16,25,36],可以使用for-in循环:
 

L = []
for i in range(1,7):
    L.append(i*i)
print(L)
# [1,4,9,16,25,36]

上述的解决方案有更好的替代,那就是使用列表生成式。

列表生成式的使用场景:凡是可以通过 for-in 循环创建的列表,都可以使用列表生成式来创建。


列表生成式的语法格式:

[表示列表元素的表达式 for 自定义的变量 in 可迭代对象]


其中,“表示列表元素的表达式“中通常包含“自定义的变量“。

L = [i*i for i in range(1,7)]
print(L)
# [1,4,9,16,25,36]
  • 在列表生成式中使用 if 语句

可以在列表生成式的for-in循环后添加if语句。
 

L = [i*i for i in range(1,7) if not i%2]
print(L) #[4,16,36]
  • 在列表生成式中使用双重循环

L = [(i,j) for i in range(1,4) for j in range(1,4)]
print(L)
# [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]

以上代码相当于:

L = []
for i in range(1,4):
    for j in range(1,4):
        L.append((i,j))
  • 列表生成式支持嵌套

matri×=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
L = [[row[i] for row in matrix] for i in range(4)]
print(L)
# [[1,5,9],[2,6,10],[3,7,11],[4,8,12]]

上述代码相当于:

L=[]
for i in range(4):
    L.append([row[i]for row in matrix])
print(L)

#以上代码也相当于:
 

L = []
for i in range(4):
    l_row = []
    for row in matrix:
        L_row.append(row[i])
    L.append(l_row)
print(L)
#[[1,5,9],[2,6,10],[3,7,111,[4,8,12]]

注意,在嵌套时,先执行外面一个for循环语句;在使用双重循环时,先执行第一个for循环。

四、关于列表的一些题目

sum() 函数通常用于对数字列表进行求和,但也可以用于其他类型的列表,只要第二个参数提供了一个初始值,这个初始值用于累积结果。在你提供的例子中,sum(lst, []) 试图对列表的列表(即二维列表)进行求和,并使用空列表 [] 作为初始值。

sum() 函数会遍历 lst 中的每个子列表,并将它们与初始值(空列表 [])相加。因此,输出将是一个合并后的列表:[1, 2, 3, 4]


a = ['foo', 'bar', 'baz', 'quux', 'corge'] 
max(a[2:4] + ['grault'])
  1. 列表切片a[2:4]

这表示从列表 a 中提取从索引 2(包含)到索引 4(不包含)的元素。在 Python 中,列表的索引是从 0 开始的。因此,a[2:4] 会得到子列表 ['baz', 'quux']
2. 列表连接a[2:4] + ['grault']

这表示将上面得到的子列表 ['baz', 'quux'] 与新列表 ['grault'] 连接起来。连接后的新列表是 ['baz', 'quux', 'grault']
3. 使用 max() 函数max(a[2:4] + ['grault'])

max() 函数用于返回可迭代对象(如列表)中的最大值。在这个例子中,它返回连接后的列表 ['baz', 'quux', 'grault'] 中的“最大”字符串。这里的“最大”是基于字符串的字典序(即字母顺序)来确定的。

在字典序中,字符串的比较是基于字符的 ASCII 值。因此,max() 函数会返回列表中字典序最大的字符串。在这个例子中,'quux' 是字典序最大的字符串,所以 max(a[2:4] + ['grault']) 的结果会是 'quux'

综上所述,整个语句 max(a[2:4] + ['grault']) 的结果是 'quux'


print(list('Life','is','short','you','need','Python').count('is'))

这里,list() 函数被用来将字符串 'Life is short, you need Python' 转换成一个字符列表

['L', 'i', 'f', 'e', ' ', 'i', 's', ' ', 's', 'h', 'o', 'r', 't', ',', 'y', 'o', 'u', ' ', 'n', 'e', 'e', 'd', ' ', 'P', 'y', 't', 'h', 'o', 'n']

在这个列表中是不含有 ‘is’ 字符串的,因此最后的结果为0.


 本文参考以下资料,在此对该作者表示感谢:

《图解Python》学习路径:图解Python视频教程_Python学习路线-51CTO学堂


今天的分享就到这里了,如果,你感觉这篇博客对你有帮助的话,就点个赞吧!感谢感谢……

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新AI创作系统ChatGPT网站源码Midjourney-AI绘画系统,Suno-v3-AI音乐生成大模型。

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

【CVPR2024】文本到图像的行人再识别中的噪声对应学习

这篇论文的标题是《Noisy-Correspondence Learning for Text-to-Image Person Re-identification》,作者是来自中国四川大学、英国诺森比亚大学、新加坡A*STAR前沿人工智能研究中心和高性能计算研究所的研究人员。论文主要研究了文本到图像的行人再识别(Text-to-Image Person…

Unity进阶之ScriptableObject

目录 ScriptableObject 概述ScriptableObject数据文件的创建数据文件的使用非持久数据让其真正意义上的持久ScriptableObject的应用配置数据复用数据数据带来的多态行为单例模式化的获取数据 ScriptableObject 概述 ScriptableObject是什么 ScriptableObject是Unity提供的一个…

Windows抛弃历史包袱:可能带来哪些改善?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Windows的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;性能提升固然重要&#xff0…

[NSSCTF]-Reverse:[HUBUCTF 2022 新生赛]simple_RE(base64换表)

无壳 查看ida 可以看得出是base64&#xff0c;而且是换表的。 完整exp&#xff1a; import base64 result5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8 biaostr.maketrans(qvEJAfHmUYjBacu8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD,ABCDEFGHIJKLMNOPQR…

BUUCTF---misc---[SWPU2019]我有一只马里奥

1、下载附件是一个.exe文件 2、运行之后可以看到桌面生成了1.txt文件&#xff0c;文件里面有如下内容 3、经过信息搜索&#xff1a;NTFS&#xff08;New Technology File System&#xff09;是一种由Microsoft开发的专有日志文件系统。根据它的提示&#xff0c;应该是把flag.tx…

编译原理 LR(0)

讲解视频&#xff1a;编译原理LR&#xff08;0&#xff09;分析表&#xff08;上&#xff09;_哔哩哔哩_bilibili 【编译原理】LR(0)分析表分析输入串_哔哩哔哩_bilibili 拓广文法 已知G&#xff1a;S->(S)S | ε 拓广文法&#xff1a; S -> S S -> (S)S S -> ε…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 3 - 4节&#xff09; P3《开发准备-了解ArkTS》 鸿蒙开发主要是用来开发移动端应用的。 以前我们开发移动端应用的代码&#xff…

嵌入式4-24

作业&#xff1a; 整理思维导图 定义一个矩形类Rec&#xff0c;包含私有属性length&#xff0c;width&#xff0c;有以下成员函数&#xff1a; void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…

【Spring】IOC/DI中常用的注解@Order与@DependsOn

目录 1、Order 注解改变Bean自动注入的顺序 1.1、了解SpringBootTest注解 1.2、Order 注解改变Bean自动注入的顺序 2、DependsOn 改变Bean的创建顺序 1、Order 注解改变Bean自动注入的顺序 在sping中&#xff0c;通过IOC&#xff08;控制反转&#xff09;和DI&#xff08;依…

【分治】Leetcode 数组中的第K个最大元素

题目讲解 数组中的第K个最大元素 算法讲解 堆排序&#xff1a;1. 寻找最后一个节点的父亲&#xff0c;依次向上遍历&#xff0c;完成小堆的建立&#xff1b;2. 从最后一个元素开始&#xff0c;和堆顶的数据做交换&#xff0c;此时最小的数据在对后面&#xff0c;然后对剩下的…

虚幻引擎5 Gameplay框架(一)

GamePlay概论与打包和批处理脚本 GamePlay简介与创建项目 GamePlay框架&#xff1a;用于设计游戏规则&#xff0c;组织和管理游戏核心逻辑、规则以及交互的一套结构化体系。 Default Pawn Class&#xff1a;定义角色行为逻辑&#xff0c;接收玩家控制器的输入&#xff0c;一般…

Linux 基础IO(2)磁盘文件

文章目录 1.磁盘文件2.文件系统3.软硬链接1.软链接2.硬链接 4.动静态库1.静态库2.动态库 1.磁盘文件 扇区&#xff1a;整个盘片分成不同的区块&#xff0c;每一个区块就是一个扇区。 扇区是磁盘IO的基本单位&#xff0c;一般为512Byte或4KB,一般磁盘都是512Byte磁道&#xff1a…

Mysql 查询表参考

基本操作 数据库和表的基础操作_数据库和表的基本操作-CSDN博客文章浏览阅读222次。数据库基础知识_数据库和表的基本操作https://blog.csdn.net/weixin_67573348/article/details/126946843 单表 语法分析&#xff1a;MySQL 单表查询 语法分析_adn查询-CSDN博客文章浏览阅读…

CTFHub(web sql注入)(三)

MYSQL 手工注入 1.判断字段数 输入1 输入2 输入3 得知字段有两个 2.判断注入类型 1 and 1 1 1 and 12 回显错误&#xff0c;说明存在sql注入 3.查看数据库内容 知道字段数量为2后&#xff0c;可以查看数据库位置 1 union select 1,2 使用union select 1,2查看未发现数…

【2023】springboot通过阿里云oss进行文件单个批量文件上传下载

SpringBoot整合阿里OSS实现上传下载 目录&#x1f4bb; 前言一、介绍二、阿里云添加oss1、进入oss目录2、创建bucket3、测试上传下载4、创建AccessKey管理账号 三、依赖以及配置1、依赖2、yml3、Config类4、OSSUtil 工具类 四、controller五、测试1、测试上传2、测试删除 前言 …

【调制】π/4-DQPSK信号模型及其相关特性分析 【附MATLAB代码】

MATLAB代码 % pi/4-DQPSK modulation %输入一串数&#xff0c;输出经过差分并映射的I、Q两路数据 ​ function [I,Q]pi4_dqpskmod(data) ​ nlength(data)./2; data1data.*2-1; ​ Idatazeros(1,n); Qdatazeros(1,n); ​ ​ Idatadata1(1,1:2:2*n); %串并变换 Qdatadata1(…

用户中心 -- 代码理解

一、删除表 & if 删除表 1.1 DROP TABLE IF EXISTS user 和 DROP TABLE user 网址&#xff1a; 用户管理第2节课 -- idea 2023.2 创建表--【本人】-CSDN博客 二、 代码 2.1 清空表中数据 的 命令 【truncate 清空】 网址&#xff1a; 用户管理第2节课 -- idea 2…

卡尔曼滤波器(二):Simulink卡尔曼滤波器模块使用

观看MATLAB技术讲座笔记&#xff0c;该技术讲座视频来自bilibili账号&#xff1a;MATLAB中国。 本节在Simulink中用卡尔曼滤波器来滤除传感器噪声&#xff0c;准确估算单摆摆角。 一、单摆模型简介 不考虑摩擦时&#xff0c;下图所示的单摆力学平衡方程为&#xff1a; m l 2…

‍ 太空网络攻击

&#x1f9d1;‍&#x1f680; 尤里-加加林成为征服外太空的第一人。他在 1961 年 4 月 12 日的飞行有力地推动了全世界的科技发展。 有趣的事实是&#xff1a;苏联所有首次太空发射&#xff08;包括加加林的飞行&#xff09;的弹道计算都是在苏联第一个计算机中心的电子计算机…
最新文章