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

【基础知识】Python入门:列表

列表

列表元素

>>> list = [1, 2, 3, 4, 5, '上山打老虎']
>>> print(list)
[1, 2, 3, 4, 5, '上山打老虎']

for循环遍历列表元素,下标索引访问列表单个元素list[0]、list[1]

长列表访问列表最后一个元素list[-1]、list[len(list) - 1],索引带符号为反向索引。

>>> rhyme = [1, 2, 3, 4, 5, '上山打老虎']
>>> for each in rhyme
>>> print(each)
1
2
3
4
5
上山打老虎
>>> rhyme[0]
1
>>> rhyme[5]
'上山打老虎'
>>>rhyme[-1]
'上山打老虎'

列表切片

list[start: stop: step]
>>> rhyme[0:3]
[1,2,3]
>>> rhyme[:3]
[1,2,3]
>>> rhyme[3:]
[4,5,'上山打老虎']
>>> rhyme[:]
[1, 2, 3, 4, 5, '上山打老虎']
>>> rhyme[::-1] #倒叙输出
['上山打老虎', 5, 4, 3, 2, 1]

列表方法

append(),在列表末尾添加一个指定元素

>>> list=[1,2,3,4,5,'上山打老虎']
>>> list.append('老虎打不到')
>>> list
[1, 2, 3, 4, 5, '上山打老虎', '老虎打不到']

extend(),向列表中最后一个元素后面添加一个可迭代对象

>>> list.extend(['打到小松鼠',5])
>>> list
[1, 2, 3, 4, 5, '上山打老虎', '老虎打不到', '打到小松鼠', 5]

insert(x, y):向列表指定x位置插入元素y,x:指定的插入位置,y:插入的元素

>>> l = [1, 2, 3, 4, 5, 6, 7, 8]
>>> l.insert(len(l),9)
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>l.insert(1,2)
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9]

使用切片法实现

>>> l = [1, 2, 3, 4]
>>> l[len(l):] = [5]#相当于append()
>>> l
[1, 2, 3, 4, 5]
>>> l[len(l):] = [6,7,8]#相当于extend()
>>> l
[1, 2, 3, 4, 5, 6, 7, 8]
>>> l[1:1] = [2]#相当于insert()
>>> l
[1, 2, 2, 3, 4, 5, 6, 7, 8]
>>> l[3:3] = [3,3]
>>> l
[1, 2, 2, 3, 3, 3, 4, 5, 6, 7, 8]

remove():删除指定元素。若列表中存在多个匹配的元素,只会删除第一个。若指定元素不存在,则程序报错

>>> list = [1, 2, 2, 3, 4, 5]
>>> list.remove(2)
>>> list
[1, 2, 3, 4, 5]
>>> list.remove(6)
Traceback (most recent call last):File "<pyshell#1>", line 1, in <module>list.remove(6)
ValueError: list.remove(x): x not in list

pop():参数为下标,打印并删除指定下标的元素

>>> list = [1, 0, 2, 4, 8]
>>> list.pop(4)
8
>>> list
[1, 0, 2, 4]

clear():清空列表所有元素

>>> list.clear()
>>> list
[]

赋值更改对应下标的元素

>>> list = [1, 2, 3, 4, 7]
>>> list[4] = 5
>>> list
[1, 2, 3, 4, 5]

切片更改

>>> list = [1, 2, 3, 4, 7]
>>> list[4:5] = [5]
>>> list
[1, 2, 3, 4, 5]
>>> list[2:] = [4, 8, 16]
>>> list
[1, 2, 4, 8, 16]
>>> nums = [3, 4,5,7,1,3,9]
>>> nums.sort()
>>> nums
[1, 3, 3, 4, 5, 7, 9]
>>> nums.reverse()
>>> nums
[9, 7, 5, 4, 3, 3, 1]

count():返回参数的元素所出现的次数

index(x, start, end):x:查找元素x的索引值,多个相同元素返回第一个下标。start、end:指定查找的开始结束位置。

copy():以及切片实现copy()都是浅拷贝。

>>> list = [1, 3, 4, 5, 5, 7, 9, 32]
>>> list.count(5) #查找5出现的次数
2
>>> list.index(5) #查找5的索引值
3
>>> list.index(5, 4, 7) #从位置4开始找到位置7,查元素5
4
>>> list1 = list.copy() #拷贝一个列表
>>> list1
[1, 3, 4, 5, 5, 7, 9, 32]
>>> list2 = list[:]#使用切片实现copy()
>>> list2
[1, 3, 4, 5, 5, 7, 9, 32]

列表的加法和乘法

s = [1, 2, 3]
t = [4, 5, 6]
s+t
[1, 2, 3, 4, 5, 6]
s*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

嵌套列表

二维列表,矩阵

访问嵌套列表需要使用嵌套循环实现

matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix = [[1,2,3],[4,5,6],[7,8,9]]

访问嵌套列表

for i in matrix:for each in i:print(each)
1
2
3
4
5
6
7
8
9matrix[0]
[1,2,3]
matrix[0][1]
2
matrix[2][2]
9
A = [0] * 3
A
[0, 0, 0]
for i in range(3):A[i] = [0]*3
A
[[0,0,0],[0,0,0],[0,0,0]]
#重点错误点
>>> A = [[0] * 3] * 3#不能使用该方法创建列表
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> A[0][0] = 1
>>> A
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]#会出现该错误
>>> A[0] is A[1] #原因在于使用该方法创建的列表每一行都指向了同一个对象
True
>>> A[1] is A[2]
True
#试图通过乘号对嵌套列表进行拷贝,但是是对同一个列表的引用进行了重复。
>>> x =[1,2,3] 
>>> y =[1,2,3]
>>> x is y
False
#Python对于不同对象的存储机制是不一样的

is:同一性运算符,检验两个变量是否指向同一个对象

浅拷贝和深拷贝

copy()和切片都是浅拷贝

x = [1,2,3]
y = x
x[0] = 4
x
[4,2,3]
y
[4,2,3]

x的值改变y也会变

image-20260522203042924

x = [1,2,3]
y = x.copy()
x[0] = 4
x
[4,2,3]
y
[1,2,3]

x的值改变不影响y的值

image-20260522203142702

x = [[1,2,3],[4,5,6],[7,8,9]]
y = x.copy()
x[1][1] = 0
x
[[1,2,3],[4,0,6],[7,8,9]]
y
[[1,2,3],[4,0,6],[7,8,9]]

当对嵌套列表使用copy()时只会拷贝最外层内层的列表依然是传递的引用

image-20260522203303912

深拷贝需要用到copy模块,copy模块包含两个函数,其中的copy()函数依然是浅拷贝,其中的deepcopy()函数实现的是深拷贝,即为拷贝原对象以及其所有子对象

>>> import copy #导入copy模块
>>> x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> y = copy.copy(x) #浅拷贝
>>> y
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> x[1][1] = 0
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]>>> y = copy.deepcopy(x) #深拷贝
>>> x[2][2] = 0
>>> x
[[1, 2, 3], [4, 0, 6], [7, 8, 0]]
>>> y
[[1, 2, 3], [4, 0, 6], [7, 8, 9]]

image-20260522203735361

列表推导式

oho = [1,2,3,4,5] #每个元素×2
for i in range(len(oho)):oho[i] = oho[i]*2
oho
[2,4,6,8,10]
#列表推导式,速度会快上一倍
oho = [1,2,3,4,5]
oho = [i*2 for i in oho]
oho
[2,4,6,8,10]

基本语法

[expression for target in iterable]
list = [执行语句 for i in 可迭代对象 ]
>>> x = [i+1 for i in range(10)]
>>> x
[1,2,3,4,5,6,7,8,9,10]
>>> list = [i*2 for i in 'love']
>>> list
['ll', 'oo', 'vv', 'ee']
>>> list = [ord(i) for i in 'love'] #ord()将单个字符串转化为内置编码
>>> list
[108, 111, 118, 101]

矩阵提取数据

matrix = [[1,2,3],[4,5,6],[7,8,9]]
#使用列表推导式,将一个三阶二维矩阵的第二列提取出来
>>> col2 = [row[1] for row in matrix]
>>> col2
[2, 5, 8]#使用列表推导式,将一个三阶二维矩阵的主对角线元素提取出来
>>> list = [matrix[i][i] for i in range(3)]
>>> list
[1, 5, 9]#使用列表推导式,将一个三阶二维矩阵的次对角线元素提取出来
>>> list = [matrix[i][len(matrix)-i-1] for i in range(len(matrix))]
>>> list
[3, 5, 7]

循环与列表推导式的区别:循环通过迭代来逐个修改原列表中的元素,列表推导式则是创建一个新的列表然后赋值给原列表变量

使用列表推导式,创建一个二维列表

>>> list = [[0]*3 for i in range(3)]
>>> list
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> list[0][0] = 1
>>> list
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

列表推导式的if分句

[expression for target in iterable if condition]
list = [执行语句 for i in 可迭代对象 if 满足的条件]
#先执行for语句、在执行if、最后执行左侧执行语句
even = [i+1 for i in range(10) if i % 2 == 0]#筛选偶数,并+1
even
1,3,5,7,9words = ["Great", "FishC", "Brilliant" "Excellent", "Fantastic"]
fwords = [i for i in words if i[0] == 'F']
fwords
['FishC', 'Fantastic']

嵌套列表推导式

[expression for target1 in iterable1for target2 in iterable2            ......for targetN in iterableN ]                                     [执行语句 for i in 可迭代对象1for j in 可迭代对象2......for N in可迭代对象N ]
matrix = [[1,2,3],[4,5,6],[7,8,9]]
flatten = [col for row in matrx for col in row]
flatten
[1,2,3,4,5,6,7,8,9]
#转换成循环
flatten = []
for row in matrix:for col in row:flatten.append(col)
flatten
[1,2,3,4,5,6,7,8,9][x + y for x in "fishc" for y in "FISHC"]
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']
#转换成循环
_ = [] #临时变量名
for x in "fishc":for y in "FISHC":_.append(x+y)
_
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']

列表推导式完整语法

[expression for target1 in iterable1 if condition1 for target2 in iterable2 if condition2          ......for targetN in iterableN if conditionN]                                     [执行语句 for i in 可迭代对象1 if 满足的条件1for j in 可迭代对象2 if 满足的条件2......for N in可迭代对象N if 满足的条件N]
[[x,y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]#转换成循环
>>> list = []
>>> for x in range(10):if x%2==0:for y in range(10):if y%3==0:list.append([x,y])

编程kiss原则:keep it simple and stupid

http://www.jsqmd.com/news/866785/

相关文章:

  • PHPStudy中DVWA配置失效的三层劫持机制解析
  • 2026年Burp Suite 2026.4最小可行配置指南:Java 21、代理证书与BApp实战
  • 微信小程序通信协议逆向分析实战:从抓包到签名还原
  • Grafana CVE-2022-32275未授权访问漏洞深度解析与修复实战
  • 2026 昆山黄金回收实测:5 家正规机构横评|高价避坑首选典籍黄金回收 - 资讯纵览
  • 2026年全国环保型沥青搅拌设备十大优选厂家深度评测:从依赖进口到国产领跑,铁拓机械如何用“全生命周期”方案重塑行业格局 - 资讯纵览
  • NotebookLM移动端离线能力真相,92%用户不知道的本地Embedding缓存机制,附配置代码
  • Postman电商API测试实战:状态机校验与分布式一致性验证
  • 在自动化数据处理流程中集成Taotoken多模型API
  • NVIDIA Profile Inspector终极指南:解锁700+隐藏设置的显卡优化神器
  • 人工智能核心缩写全程映射报告
  • 高速负离子吹风筒方案全解析:从原理到实战避坑指南
  • 实时VLA到底值不值?从π0抓钢笔看推理速度优化与系统延迟补偿的代价
  • Count 题解
  • Burp Suite XSS实战:从上下文识别到Payload绕过全链路
  • 题解:P15220 [SWERC 2017] Macarons
  • 通过TaotokenCLI工具一键配置多开发环境下的AI模型调用参数
  • Go语言Web应用部署与运维实战
  • 收藏 | 程序员小白必看:解码Transformer核心模块,轻松入门大模型底层逻辑
  • 2026年全屋定制厂家推荐排行榜:电视柜、餐边柜、鞋柜等各类定制柜,专业生产与品质之选! - 资讯纵览
  • 你的知识库还在用关键词搜索?2026年必须升级的3类向量-图-推理混合引擎(附迁移成本测算表)
  • 2026做GEO优化必避的行业乱象!专业平台剪流GEO规避所有风险 - 资讯纵览
  • Java 集合反序列化漏洞如何修复避免远程代码执行风险
  • Paladin Anim Set深度调优:Unity战斗系统动画集成指南
  • Unity版本降级实战:跨版本兼容性修复指南
  • 十大排序算法Python实现与可视化:从原理到工程实践
  • 工厂数据看板是什么?有什么推荐?
  • Agent Skills 到底解决了什么,又没解决什么?
  • 2026年报考指南:重庆工程学院的校园环境及设施怎么样? - 品牌2025
  • 题解:P15402 [NOISG 2026 Prelim] Digits