目录
文章目录
前言
一、列表和元组
1、创建列表和元组
2、列表和元组的通用用法
2.1 通过索引使用元素
2.2 子序列
2.3 加法
2.4 乘法
2.5 in运算符
2.6 长度、最大值和最小值
2.7 序列封包和序列解包
3、关于列表
3.1创建列表
3.2 增加列表元素
3.3 删除列表元素
3.4 修改列表元素
3.5 列表常用方法
4、关于元组
4.1元组创建
二、字典
1.字典入门
2、创建字典
3、字典的基本用法
4、字典的常用方法
5、使用字典格式化字符串
总结
列表、元组和字典都可以用来保存多个数据项,列表和元组相似,他们都按照顺序保存元素,每个元素都有索引,因此他们也都可以通过索引访问元素,但是元组是不可修改的,列表是可修改的。字典以key-value形式保存数据,也是可修改的。
因为列表和元组是类似的,所以我们放在一起进行讲解。
创建列表使用方括号,创建元组使用圆括号,并在括号中列出元组或列表的元素,元素之间用逗号隔开,举个栗子
myList = ['hello','csdn'] # 列表的创建
myTuple = ('hello','csdn') # 元组的创建
需要注意的是,在创建只有一个元素的元组时,要在元组的元素后添加一个逗号防止误以为是字符串加上了圆括号
myTuple = ('hello',)
索引从0开始,前面在介绍字符对象时已经介绍过常用的索引办法,需要注意的是,列表的元素可以被查找也可以被修改,而元组是不可变的,只可以被查找,不可被修改。
与字符对象相似的是,列表和元组也可以通过索引获取指定的某段内容,此种操作也叫切片slice,完整语法为mylist[start:end:step]和mytuple[start:end:step],代表从start索引开始到end索引结束(不包含)的所有元素,而start和end可以为正也可以为负,正数代表从左到右计数,负数表示从右到左计数。若指定step参数,则代表间隔step个元素再取元素。
加法的和就是两个列表或元组拼接后的总和,但是列表只能和列表相加,元组只能和元组相加
列表和元组乘法的含义:N*列表或N*元组,代表把列表或元组重复n次。
用来判断某个元素是否在列表或元组中,返回值为True或False
a = ('hello','world')
print(1 in a) #返回False
print('hello' in a)# 返回True
需注意的是,字符串也可以比较大小
len()函数用来计算元组或者列表的长度,max()函数用来计算元组或者列表中的最大值,min()函数用来计算元组或者列表中的最小值。
a = [1,0,3,4]
b = ['a','b','c']
print(max(a)) # 输出4
print(min(b)) # 输出a
print(len(a)) # 输出4
序列解包和序列封包听起来可能有点高大上,但是讲完之后可能你会觉得,这就是普通的一个东东穿上了高大上的马甲。
序列封包:把多个值赋给一个变量时,Python会自动将多个值封装成元组,这种功能被称为序列封包。
序列解包:程序允许将序列(元组和列表)赋值给多个变量,此时序列的多个元素会被依次赋值给每个变量(序列元素个数和变量个数相等)
其实无论是封包还是解包,都是变量赋值的事情嘛~我们来看栗子吧
# 序列封包
vas = 1,3,5,7
print(vas) # 输出(1,3,5,7)
print(type(vas)) #输出
# 序列解包——元组
a_tuple = 1,3,5,7
a,b,c,d = a_tuple
print(a,b,c,d) # 输出1,3,5,7
# 序列解包——列表
a_list = ['hello','csdn']
e,f = a_list
print(e,f) # 输出'hello','csdn'
如果在赋值过程中同时用封包和解包机制,就可以让赋值运算符支持同时将多个值赋给多个变量
x,y,z = 1,2,3
print(x,y,z) # 输出1,2,3
# 上式等价于
xyz = 1,2,3 # 先执行封包
x,y,z = xyz # 再执行解包
# 应用:交换变量值
x,y,z = y,z,x
print(x,y,z) # 输出2,3,1
在序列解包时,也可以解开部分变量,剩下的依然使用列表变量保存。在被赋值的变量左边加“*”代表该变量是一个列表。
first,second,*rest = range(5)
print(first) # 输出0
print(second) # 输出1
print(rest) # 注意这里的rest前没有星号*
first,*middle,last = range(5)
print(first) # 输出0
print(middle) # 输出[1,2,3]
print(last) # 输出4
*begin,last = range(5)
print(begin) # [0,1,2,3]
print(last) # 输出4
除了第一部分提到的创建列表的方式,还可以通过其他方式创建
(1)用list()函数来创建,它可以将元组,区间等对象转换为列表
# 将元组转换为列表
a_tuple = ('hello','csdn')
a_list = list(a_tuple)
print(a_list) # 输出['hello','csdn']
# 将区间转换为列表
a_range = range(1,5)
b_list = list(a_range)
print(b_list) # 输出[1,2,3,4]
(2)通过列表生成式创建列表
[ expression for i in 序列 ]
number_list = [number for number in range(1,6)]
print(number_list)
# number_list 为[1, 2, 3, 4, 5]
结合条件表达式:[ expression for items in interable if condition ]
举个栗子:通过列表生成式创建一个在1到5之间的偶数列表
a_list = [ number for number in range(1,6) if number%2 == 0 ]
(1)append()方法:可以接收单个值,元组,列表等,但是只是把接收到的列表,元组等当成单个元素,而这个元素其实是被接收的列表或元组的整体。这样就涉及了嵌套列表,嵌套元组的情形。
(2)extend()方法:可以将被接收的元组或列表里的所有元素依次添加至接收列表的末尾。
(3)insert(num,序列)方法:可以指定添加位置,讲序列添加至num位置,而添加的序列也是作为一个整体插入到指定位置。
a = ['a']
b = [1,2,3]
c = ('m','n','q')
print(a.append(b)) # 输出['a',[1,2,3]]
print(a.append(c)) # 输出['a', ('m','n','q')]
print(a.extend(b)) # 输出['a',1,2,3]
print(a.extend(c)) # 输出['a','m','n','q']
print(a.insert(1,b)) # 输出['a',[1,2,3]]
print(a.insert(1,'qq')) # 输出['a','qq']
(1)del语句
通过del语句进行删除操作,可以删除列表中的单个元素,也可以删除列表中的一段(通过切片操作选取)。del语句还可以删除普通变量。
m = [1,2,3,4,5]
del m[1]
print(m) # 输出[1,3,4,5]
del m[0:2]
print(m) # 输出[4,5]
name = 'Tom'
del name
print(name) # 报错,因为name已经被删除
(2)remove()函数
根据元素本身删除,只会删除第一个符合条件的元素,但若找不到要删除的元素,程序会报错
t = [1,2,3,2,1,1]
t.remove('1')
print(t) # 输出[2,3,,2,1,1]
(3)clear()函数,清空所有元素
(1)可以直接对列表的元素进行修改
r = [1,2,3,4]
r[0] = 0
print(r) # 输出[0,2,3,4]
(2)可以对一段数据进行修改,但是需要等长度的改正值,也可变成删除或添加数据操作
a = [4,5,6,7,8]
a[0:3] = [1,2,3]
print(a) # 输出[1,2,3,7,8]
# 若是在一个位置进行修改则相当于插入
a[1:1] = [9,9,9]
print(a) # 输出[1,9,9,9,2,3,7,8]
# 若是将其中一段赋值为空列表则代表删除数据
a[1:4] = []
print(a) # 输出[1,2,3,7,8]
index()函数还可传入start和end函数 ,用于指定查找区间
sort()函数还可传入key和reverse,这两个参数必须通过参数名指定,key参数为每个都生成一个比较大小的“键”,也就是根据什么进行排序;reverse参数用于执行是否反转程序(默认从小到大排序,若reverse=True,则会改为从大到小排序)
Python也可将列表区间等对象转化为元组,这是通过tuple函数实现的。用法同3.1列表的创建
字典用于存放具有映射关系的数据,如图所示
可以通过key来访问value,字典中的key不可重复
(1)花括号法
score = {'语文':90,'数学':91,'英语':80}
print(score)
(2)dict()函数
字典的key要求是不可变类型,元组可以作为字典的key,但是列表不可以
dict1 = dict{语文=90,英语=86,数学=90,政治=80}
dict2 = dict{'语文':90,'英语':86,'数学':90,'政治':80}
# 通过二元组列表
list = [('语文', 90), ('英语', 86), ('数学', 90),('政治',80)]
dict3 = dict(list)
# 通过zip函数和dict函数
dict4 = dict(zip(['语文','英语','数学','政治'], [90, 86, 90,80]))
# 通过dict.fromkeys()函数,通常用来初始化字典,设置默认值
dict5 = dict.fromkeys(range(4),'x') # 输出{0: 'x', 1: 'x', 2: 'x'}
(1)通过key访问value(使用上面创建的字典)
dict1['语文']
输出90
(2)通过key添加key-value对,为不存在的key赋值就是增加key-value对
dict1['Python':96]
(3)通过key修改key-value对,为已经存在的value赋值,就是修改key-value对
(4)通过key删除key-value对
del dict1['Python']
(5)通过key判定指定key-value是否存在,in或not in
字典相当于索引是任意不可变类型的列表,而列表则相当于key只能是整数的字典
列表的索引是从0开始连续增大的,但字典的索引即便是整数类型,也不需要从0开始,而且不需要连续。因此,列表不允许对不存在的索引赋值,而字典允许直接对不存在的key赋值。
(1)clear()函数:清空字典中所有的key-value对
(2)get()函数:根据key来获取value值,相对方括号索引值的来说,get()方法在访问不存在的key时,该方法会简单的返回None,而方括号会报错
(3)update()函数:把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里
语法:dict.update(dict2)【dict2 -- 添加到指定字典dict里的字典】
若被更新的字典中已经包含了对应的key-value对,那么原value会被覆盖,若没有,则会添加新的key-value对
(4)items() keys() values()分别用来获取字典中所有的key-value对,所有key,所有value,通常调用这三个函数后,都要用list函数将他们转换为列表
(5)pop():用于获取指定key对应的value值并删除这个key-value对,popitem()用于随机弹出字典中的一个key-value对【事实上,依然是弹出栈的最后一个数据项,只不过因为字典存储key-value的顺序不可知,所以给人一种随机弹出的错觉】。
(6)setdefault():根据key获取对应value值,但是区别于get的是,它可以设置不存在的key的value值,若key已经存在,则不修改原值。
dict2 = dict{'语文':90,'英语':86,'数学':90,'政治':80}
print(dict2.setdefault('语文',92)) # 输出90,因为原字典里已经有key='语文'了,使用原值
print(dict2.setdefault('历史',92)) # 输出92
dict2 = dict{'语文':90,'英语':86,'数学':90,'政治':80}
temp = '小明的成绩为,语文%(语文),数学%(数学),英语%(英语),政治%(政治)'
print(temp%dict2)# 输出为小明的成绩为,语文90,数学90,英语86,政治80
本文介绍了列表,元组,字典,内容较多,但是是学习Python的基础,需要牢牢掌握。
参考书籍《疯狂Python讲义》