Python列表,元组,字典,集合的区别

 

 

  列表 元组 集合                                                           字典
英文 list truple set dict
定义 用于存储任意数目、任意类型的数据集合。 元组属于不可变序列,不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。  集合是无序可变元素不能重复。实际上集合底层是字典实现,集合的所有元素都是字典中的“键对象”,因此是不能重复的且唯一  字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含: “键对象”和“值对象”。
可否读写  读写 只读  读写 读写
可否重复  是  是 否   是
存储方式  值 值  键(不能重复)   键值对(键不能重复)
是否有序  有序 有序 无序  无序,自动正序 
创建
  • 创建包含各类类型的数据:

list = ["a", "b", "c", 1, 2, True]

  • 创建纯数字列表:

list = list(range(10))

  • 创建空列表:

list = []

  •  元组使用小括号来进行创建,如:tup1 =(''physics,'chemistry',1997,2000)
  • 组也可以不使用小括号括住元素,如:t = 'a','b','c',1,2,3
  • 如果元组只有一个元素时,必须在这个元素后增加逗号说明这是一个元组:t4 = ('see',)
  • 通过 tuple()创建元组 tuple(可迭代的对象),如:
b = tuple()
print(b) # 结果:()
b = tuple('abc')
print(b) # 结果:('a', 'b', 'c')
b = tuple("1234")
print(b) # 结果:('1', '2', '3', '4')
b = tuple([1,2,3])
print(b) # 结果:(1, 2, 3)
b = tuple(1234)
print(b) # 结果:报错:TypeError: 'int' object is not iterable
 

1)使用{}符号创建集合

college1 = {"哲学","经济学","法学","教育学"}
print(college1) 

# 输出没有按照定义的集合显示,每次运行显示的集合中的顺序不一样,
因为生成的哈希散列值不一样,导致存储的顺序不一样

 

2)使用set()函数创建集合,set()内置函数从其他数据结构转换,set1 = set(其他数据结构)

college2 = set(["金融学","哲学","经济学","历史学","文学"])
print(college2)

3)使用set创建字符串集合

college3 = set("我爱中国")
print(college3)

4)空集合set1 = set()
注:set1 = {}创建的是空字典

  •  使用{}、dict()来创建字典对象:
dict = {'键1':'值','键2':'值','键3':'值','键4':'值'}dict = dict(键1='值',键2='值',键3='值',键4='值',键5='值')
  • 通过 zip()创建字典对象
k = ['name','age','job']
v = ['joe',28,'teacher']
d = dict(zip(k, v))
print(d)
  • 通过 fromkeys 创建值为空的字典
dict4 = dict.fromkeys(["键1","键2","键3"],"N/A") 
# 利用序列来创建key,可以设置默认值,没有设置初始值,默认为None print(dict4)
常用方法
  • 增加元素
list.append(x):将元素x增加到列表list的尾部alist = blist + clist:将列表blist和列表clist的元素依次复制到新的列表alist中list.extend(alist):将列表alist的所有元素加到列表list的尾部list.insert(index,x):在列表list的指定位置index处插入元素x,插入位置后的元素向后移动
  • 删除元素
list.remove(x):在列表list中删除首次出现的元素xlist.pop(index):删除并返回列表list指定位置index处的元素,如果不指定index,则默认是最后一个元素list.clear():删除列表list的所有元素,并不是删除列表listdel list[index]:删除列表指定位置index处的元素,若index超出返回则抛出异常list[index1:index2]=[]:删除索引在index1到index2-1内的元素
  •  访问元素
list.index(x):返回第一个元素x的索引位置,若不存在元素x则抛出异常list[index]:通过索引直接访问元素。 索引的区间在[0, 列表长度-1]这个范围。 超过这个范围则会抛出异常list[:]:提取整个列表list[start:]:从索引start开始到结尾提取列表list[:end]:从头开始到索引end-1提取列表list[start:end]:从start到end-1提取列表list[start:end:step]:从start提取到end-1,步长是step
  • 计数
list.count(x):返回指定元素x在列表list中出现的次数len(list):返回列表中包含元素的个数
  • 成员资格判断
x in list:如果元素x在列表list中,则返回True,否则返回False
  • 列表排序
修改原列表,不建新列表的排序:list.reverse():所有元素原地进行逆序排序  list.sort():所有元素原地进行升序排序(reverse = False 升序(默认)),加上排序规则reverse = True则进行降序排序建新列表的排序:blist = sorted(alist):通过内置函数 sorted()进行排序,这个方法返回新列表,不对原列表做修改blist = reversed(alist):内置函数 reversed()也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象

 
  • 排序:
如果要对元组排序,只能使用内置函数 sorted(tupleObj)
  • zip:
zip(列表 1,列表 2,...)将多个列表对应位置的元素组合成为元组,并返回这个 zip 对象
a = (2,3,4,5)
b = (1,2)
print(list(zip(a, b))) # 结果:[(2, 1), (3, 2)]
  • 获取元素:
获取数据,在获取数据时与列表完全相同:
print(t[5]) # 正序索引,获取第6个元素
print(t[-1]) # 倒序索引
print(t[1:4]) # 范围取值
print('b' in t ) # 成员运算符
与列表的区别:
列表 元组
内容允许扩展 内容不可变
内存存储动态变化 创建后固定不变
效率较低 效率较高
运行时数据需要变更时使用 用于保存稳定不变的数据
保存天气数据,股市数据 保存国家名,元素周期表      
列表使用方括号,list=[‘a’,’b’,1] 元组使用小括号,tuple=(‘a’,’b’,1)
 

集合的数学运算
先定义两个集合:set1和 set2
1)交集
获取两个集合中重复部分,新建一个集合
c3 = set1.intersection(set2)
更新原有集合:把交集赋值给set1
set1.intersection_update(set2)
2)并集
将两个集合元素合并,去重:c4 = set1.union(set2)
Python中没有并集的更新函数update
3)差集
c5 = set1.difference(set2) #表示set1在set2中不存在的部分
c6 = set1.symmetric_difference(set2) #symmetric_difference表示双向差集。既包含了set1在set2中没有出现的元素,也包含了set2在set1中没有出现的元素。
set1.difference_update(set2) #对set1进行更新操作
set1.symmetric_difference_update(set2) #对set1进行更新操作
集合间的关系操作

s1 = {1, 2, 3, 4, 5, 6}
s2 = {6, 5, 4, 3, 2, 1}
# == 判断两个集合的元素是否完全相同
print(s1 == s2)
s3 = {4, 5, 6, 7}
s4 = {1, 2, 3, 4, 5, 7, 6, 8}
# issubset判断是否为"子集"
print(s3.issubset(s4))  # s3是否为s4的子集
# issuperset判断是否为"父集"
print(s4.issuperset(s3))  # s4是否为s3的父集
s5 = {6}
s6 = {1, 3, 5, 7, 9}
# isdisjoint 函数判断两个集合是否存在重复元素
# True 代表不存在重复元素,False则代表存在重复
print(s5.isdisjoint(s6))


操作集合元素
1)集合的遍历
college1 = {"哲学", "经济学", "法学" , "教育学"}
for c in college1:
print(c)
2)判断元素存在
print("哲学" in college1)
3)集合不支持按索引提取数据
print(college1[3]) #会报错
4)新增数据,一次只能添加一个元素
college1.add("计算机学")
5)update方法一次添加多个元素
college1.update(["生物学" , "工程学"]) #列表也能改成元组
print(college1)
6)更新集合中的元素是要删除原有元素,再创建新元素(先remove或discard,再add)
删除元素操作:
remove如果删除不存在的元素时,会报错
discard如果遇到不存在的元素时,则会忽略删除操作
7)set.clear():清空set中的所有元素

 
 
  • 字典的取值操作
1)单个取值a = dict["k1"]可取到该字典中键k1对应的值;如果k1不存在,则会报错。a = dict.get("k1")如果k1存在,输出该键对于的值;如果k1不存在,会输出None。a=dict.get("k1" , "vn")如果k1存在,输出该键对于的值;如果k1不存在,会输出后面的值vn。2)判断键是否存在于字典k in dict可判断该键k是否存在于字典dict中,返回True或False。注意只判断键,不判断值。3)遍历字典
#遍历所有的键-值对 -- items()                      
for k,v in {1:'a',2:'b'}.items():          
    print(k,v)                             
print("-------------------")               
#遍历字典中的所有键 -- keys()                       
for k in {'a':'b','c':'d'}.keys():         
    print(k)                               
print("-------------------")               
for k in {'a':'b','c':'d'}:                
    print(k)                               
print("-------------------")               
#遍历字典中的所有值 -- values()                     
for v in {'a':'b','c':'d'}.values():       
    print(v)
4)取最大最小键表达式 max({2:10,8:4,5:9}) 的结果是8。-----------字典由键值对组成,max(D)输出的是最大的键。表达式 min({2:10,8:4,5:9}) 的结果是2。-----------字典由键值对组成,min(D)输出的是最小的键。
  • 字典元素的添加、修改和删除

1)新增和更新
新增和更新均可以使用update函数,秉承有则更新,无则新增的原则。

 
dict1.update(k1 = "v1" , k2 = "v2") 或者:dict['k'] = "v"原字典就有的k则更新v,没有的就添加一个。update内用的是 k = "v",k不需要引号。
2)删除

dict1.pop("k1" , "k2")删除对应的k所在的键值对。pop里只写k,要加引号。

dict1.popitem():删除该字典中最后一个键值对,popitem本身有值,为被删掉的键值对转为元组形式,即("k" , "v")。在 3.7 之前的版本中,popitem() 方法删除一个随机项。

dict1.clear()清空字典。

字典的其他常用操作

1)为字典设置默认值
setdefault为字典设置默认值,如果某个key存在则忽略,如果不存在则设置。dict.setdefault('key','默认值')如:emp.setdefault('grade','c')
2)字典的视图
随着原始数据的变动而变动。ks = emp.keys()  提取键
vs = emp.values()  提取值
its = emp.items()  提取键对值
3)字典的格式化输出

老版本字典格式化字符串变量 = “%(键)s”%字典名str="姓名:%(name)s,评级:%(grade)s,入职时间:%(hiredate)s" %emp 

新版本字典格式化字符串变量 = “{键}”.format_map(字典名)emp_str = "姓名{name},评级:{grade},入职时间:{hiredae}".format_map(emp)



posted @ 2021-12-31 15:04  钟胜一  阅读(435)  评论(0编辑  收藏  举报