[新星计划] Python数据类型(下) | 10分钟,轻松搞定Python列表操作
Posted cPen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[新星计划] Python数据类型(下) | 10分钟,轻松搞定Python列表操作相关的知识,希望对你有一定的参考价值。
文章目录
系列文章
https://blog.csdn.net/cpen_web/category_11089219.html
本文主要内容 Python数据类型中的容器类型,包含列表、元组、字典和集合的相关操作,欢迎指正
容器类型
4种内置数据结构(容器类型)
列表:list=>[val1,val2,val3,val4]
元组:tuple=>(val1,val2,val3,val4)
字典:dict=>{key1:val1,key2:val2}
集合:set=>{key1,key2,key3,key4}
● 列表(list)
列表是处理一组有序项目的数据结构
列表是python中最具灵活性的有序集合对象类型
列表可以包含任何类型的对象:字符串、数字甚至其他列表
列表是可变的数据类型,即这种类型的值是可以被修改的
Example:表示一个购物清单
goods=[‘牛奶’、‘运动鞋’、‘咖啡’、‘手机’、‘羊肉’、‘葡萄’、‘桔子’]
列表通过方括号中用逗号分割的项目定义
# 示例
# 定义空列表
>>> lst = []
>>> type(lst)
<class 'list'>
>>> lst2 = list() # 注:工厂函数
>>> type(lst2)
<class 'list'>
# 列表可装入python的任何对象:
>>> lst3 = list("abc") # 注:字符串
>>> lst3
['a', 'b', 'c']
>>> lst = [1,'abc',2.5,True]
>>> lst = [1,'abc',2.5,True,lst3] # 注:其他列表
>>> lst
[1, 'abc', 2.5, True, ['a', 'b', 'c']]
列表基本操作
○ 索引
通过下标访问列表中的元素,下标从0开始计数,可取出一个元素
# 示例
>>> lst = [1,2,3]
>>> id(lst)
140078683813384
>>> lst += [4]
>>> id(lst)
140078683813384 # 注:内存地址不变
>>> lst[0]
1
>>> lst[0] = "a" # 注:改变列表里的元素值
>>> id(lst)
140078683813384
# 下标不能越界(Index Error:list index out of range)
>>> lst
['b', 2, 3, 4]
>>> lst[4] # 注:下标越界 会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
○ 切片
切片是通过下标访问列表中的元素,切片可以取出一个子列表
起止区间:[ start,end )
step:默认=>1
start:默认=>step为正时,start为0;step为负时,start为-1
end:默认=>step为正时,end为列表结尾;step为负时,end为列表开始
注意:三个值都为选填项
# 示例:正切片
>>> a = [1,2,3,4,5,6]
>>> a[0:4] # 注:切片,前4个
[1, 2, 3, 4]
>>> str = "123456"
>>> str[0:4] # 注:切片,前4个
'1234'
>>> a[:4] # 注:效果一样
[1, 2, 3, 4]
# 示例:负切片,步长为-1
>>> a = [1,2,3,4,5,6]
>>> a[-1:3:-1] # 注:-1指向6, 3指向4,-1从右往左
[6, 5]
>>> a[-1:-4:-1] # 注:-1指向6,-4指向3,-1从右往左
[6, 5, 4]
>>> a[-1:-44:-1]# 注:-1指向6,-44越界,-1从右往左
[6, 5, 4, 3, 2, 1]
>>> a[-1:4:-1] # 注:-1指向6, 4指向5,-1从右往左
[6]
>>> a[-3:4:-1] # 注:-3指向4, 4指向5,4向左取不到5
[] # 注:为空 起始位置有误时,切出来会是空(不会报错)
切片对象(slice函数)
slice函数的用途:生成一个slice对象,相当于可以给要切的内容取个名字
# 示例
>>> a = ["a","b","c","d"]
>>> a
['a', 'b', 'c', 'd']
>>> b = [1,2,3,4,5,6]
>>> s1 = slice(0,3,1) # 注:引用时需要传参进去
>>> a[s1] # 注:切片 前3个
['a', 'b', 'c']
>>> b[s1] # 注:切片 前3个
[1, 2, 3]
>>> c = ["xx","yy","zz","ee"]
>>> c[s1] # 注:切片 前3个
['xx', 'yy', 'zz']
○ 增加
增加列表元素的方式
append:在末尾,作为整体追加,类型不限
insert:在index位置插入元素
extend:扩展列表
# 示例
# append
>>> a = ["apple", "orange", 123, 0.1111, "cali"]
>>> a.append("test") # 注:追加字符串
>>> a
['apple', 'orange', 123, 0.1111, 'cali', 'test']
>>> lst = ['a','b','c']
>>> lst2 = [1,2,3]
>>> lst.append(lst2) # 注:追加的类型是数组
>>> lst
['a', 'b', 'c', [1, 2, 3]] # 注:追加的类型是数组
# insert
>>> lst = ['a','b','c']
>>> lst.insert(1,'d') # 注:在第2个元素前插入数据
>>> lst
['a', 'd', 'b', 'c']
# extend
>>> a = [1,2,3]
>>> str = "abc"
>>> a.extend(str) # 注:扩展字符串
>>> a
[1, 2, 3, 'a', 'b', 'c']
extend与+
注意:只限可转为list的类型(str,list,tuple)
# 示例
>>> a = ['a','b','c']
>>> a2 = [1,2,3]
>>> a.extend(a2)
>>> a
['a', 'b', 'c', 1, 2, 3]
>>> a + ["5"] # 注:+ 法只能list 和 list 相加
['a', 'b', 'c', 1, 2, 3, '5']
>>> a
['a', 'b', 'c', 1, 2, 3] # 注:+ 法 运行结束后 数组a没有变化
>>> b = a + ["5"] # 注:赋值给数组b
>>> b # 注:可以通过 赋值给数组b的方法来保存 变化
['a', 'b', 'c', 1, 2, 3, '5']
>>> id(a)
140273972677768
>>> a += ["6"]
>>> id(a)
140273972677768 # 注:a += ["6"] 内存地址不变 对象不变,内容改变
>>> a = a + ["7"]
>>> id(a)
140273837551816 # 注:a = a + ["7"]内存地址改变
○ 删除
删除列表元素的方式
pop:删除元素,默认最后一个(指定index删除)
remove:删除指定的元素(要删除的数据不存在时,会出错)
del:根据下标删除
del是python的一个关键字,用于删除变量(的引用)
clear:清空列表
# 示例
# pop
>>> a.pop() # 注:默认删除最后1个
'7' # 注:返回值,删除的元素
>>> a.pop(2)# 注:指定索引2 删除第3个元素
'c'
# remove
>>> a = ["xx","yy","xx"]
>>> a.remove("xx") # 注:删除指定元素,只删除第1个
>>> a
['yy', 'xx']
>>> a
['yy', 'xx']
>>> a.remove("zz") # 注:要删除的数据不存在时,会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
# del
>>> a = [1,2,3,"xx","yy","zz"]
>>> del a[3] # 注:删除索引3 第4个
>>> a
[1, 2, 3, 'yy', 'zz']
>>> del a[0:2] # 注:切片删除
>>> c = 1
>>> del c # 注:del删除变量的引用
>>> c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
# clear
>>> a
[3, 'yy', 'zz']
>>> a.clear()
>>> a
[] # 注:clear清空
○ 修改
修改元素主要是利用下标和切片来修改或增加、删除
# 示例
>>> a = [1,2,3,'a','b','c']
>>> a
[1, 2, 3, 'a', 'b', 'c']
>>> a[2] = "x" # 注:修改元素
>>> a
[1, 2, 'x', 'a', 'b', 'c']
>>> a[1:1] # 注:[1,1)
[] # 注:为空
>>> a[1:1] = "abc" # 注:在起始位置 索引为1 处之前 增加列表 str类型转换为列表
>>> a
[1, 'a', 'b', 'c', 2, 'x', 'a', 'b', 'c']
>>> b = ["a","b","c"]
>>> b[2:2] = ["x","y"] # 注:索引为2处之前 增加列表
>>> b
['a', 'b', 'x', 'y', 'c']
>>> b[2:4] = ["x","y","z"] # 注:索引2、3 的值 替换
>>> b
['a', 'b', 'x', 'y', 'z', 'c']
>>> b[1:5] = "12" # 注:切出来后,再转换为列表。str类型转换为列表
>>> b # 注:索引1、2、3、4 的值 替换 为 ‘1’‘2’
['a', '1', '2', 'c']
>>> b
['a', '1', '2', 'c']
>>> b[5:-3]
[]
>>> b[3:-3] # 注:获取不到
[]
>>> b[3:-3] = "xy" # 注:这个位置开始(start位置开始),替换成其他的list
>>> b # 注:看 找出的元素是否为空
['a', '1', '2', 'x', 'y', 'c']
>>> c = ["a","b","c","d","1"]
>>> c[1:4] = "hello" # 注:找出b c d 把bcd 替换成h e l l o
>>> c
['a', 'h', 'e', 'l', 'l', 'o', '1']
>>> c = ['a', 'h', 'e', 'l', 'l', 'o', '1']
>>> c[5:3] # 注:获取不到
[]
>>> c[5:3] = ["x","y"] # 注:c[5:3]为空,在 o (下标5)处插入x y
>>> c
['a', 'h', 'e', 'l', 'l', 'x', 'y', 'o', '1']
○ 反转
反转列表-reverse或切片
# 示例
# 1.负切片 实现反转,输出的值反转
>>> a = [1,2,3,4]
>>> a[::-1] # 注:负切片
[4, 3, 2, 1]
>>> a # 注:a本身的值 没有反转
[1, 2, 3, 4]
# 2.reverse 字符串的反转
>>> a
[1, 2, 3, 4]
>>> a.reverse()
>>> a # 注:a本身的值 反转
[4, 3, 2, 1]
○ 排序
列表排序-sort
# 示例
>>> a
[4, 3, 2, 1]
>>> a.sort()
>>> a
[1, 2, 3, 4] # 注:排序后 a本身的值发生改变
# 反向排序
a.sort(reverse=True)
>>> a
[1, 2, 3, 4]
>>> a.sort(reverse=True) # 注:反向排序,升序变成降序
>>> a
[4, 3, 2, 1] # 注:从大到小排序
# 不支持int和str混合 的排序:
>>> a = ["a",1,"b",2]
>>> a.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
>>> a = ["a","1","b","2"]
>>> a.sort()
>>> a
['1', '2', 'a', 'b']
# 按 编码排序
>>> a = ["a","1","b","2","A"]
>>> a
['a', '1', 'b', '2', 'A']
○ 统计
len、count、index
# 示例
# len 总长度
>>> a
['a', '中', '序', '排', '文']
>>> len(a)
5
>>> a.append([1,2,3])
>>> len(a)
6
>>> a
['a', '中', '序', '排', '文', [1, 2, 3]]
>>> a.extend([1,2,3])
>>> len(a)
9
# count统计元素出现的次数
>>> a
['a', '中', '序', '排', '文', [1, 2, 3], 1, 2, 3]
>>> a.count("a")
1
>>> a.count(1)
1
# index返回元素所在的索引位置
>>> a = ["x","y","x",1]
>>> a.count("x")
2
>>> a.index("x")
0
>>> a.index("z") # 注:index通过元素找索引,如果没有会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'z' is not in list
○ 遍历
遍历:依次取出对象中的每一项数据
list是一个可迭代对象(iterable),可以直接用for遍历
# 示例
# 1.for i in a:
>>> a
['x', 'y', 'x', 1]
>>> for i in a:
... print(f"item is --->{i}")
...
item is --->x
item is --->y
item is --->x
item is --->1
# 示例
# 2.enumerate()函数
# 特点:会返回元组,元组里包含每一个下标和值
# 注:用1个i去遍历,获取的是元组
>>> for i in enumerate(a):
... print(f"item is --->{i}")
...
item is --->(0, 'x')
item is --->(1, 'y')
item is --->(2, 'x')
item is --->(3, 1)
# 用2个临时变量,获取enumerate(a)元组的返回
>>> for i,j in enumerate(a):
... print(f"{i}-->{j}")
...
0-->x
1-->y
2-->x
3-->1
○ 判断成员关系
判断列表中是否有某个数据
# 示例
>>> lst = ['a','b','c','d']
>>> print('a' in lst)
True
>>> print('x' in lst)
False
>>> s = 'a'
>>> print(s, '在' if s in lst else '不在以上是关于[新星计划] Python数据类型(下) | 10分钟,轻松搞定Python列表操作的主要内容,如果未能解决你的问题,请参考以下文章
[新星计划] Python数据类型(上) | 5分钟,快速了解Python字符串
[新星计划] Python数据类型(上) | 5分钟,快速了解Python字符串
新星计划·2023-第1期 - Python赛道报名入口 -〖你就是下一个新星〗
[新星计划] Python内存管理 | 引用计数垃圾回收内存池机制