python系列之:列表、元组、集合、字典的区别
- 一、列表、元组、集合、字典的区别
- 二、for循环遍历列表、元组、字典和集合
-
- 1.遍历列表
- 2.遍历元组
- 3.遍历字典
- 4.遍历集合
- 三、列表、元组、集合和字典相互转换
-
- 1.列表元组转化为集合(去重)
- 2.两个列表转字典
- 3.嵌套列表转字典
- 4.列表、元组转字符串
- 5.字典转化为字符串
- 6.字典key和value互相转换
- 7.字符串转换为列表
- 8.字符串转元组
- 9.字符串转集合
- 10.切分字符串
- 四、删除一个列表重复元素
-
- 1.使用集合set方式
- 2.使用字典的方式,利用字典key的唯一性
- 3.列表推导的方式
- 4.reduce函数
- 五、求两个列表的交集、差集或并集
-
- 1.for循环
- 2.用set操作
- 六、反序地迭代一个序列
-
- 1.reversed()内置的函数方法
- 2.range()函数方法
- 3.[::-1]扩展切片方法
- 4.list自带的reverse()方法
- 七、列表的sort方法和sorted方法
-
- 1.sort()方法
- 2.sorted()方法
- 3.按列表a1中字典元素的键age由大到小排序
- 八、列表中常用的方法
- 九、列表生成式
- 十、字典内置函数
- 十一、集合常见内置方法
一、列表、元组、集合、字典的区别
- 列表:长度可变有序的数据存储容器,可以通过下标索引取到相应的数据。
- 元组:固定长度不可变的顺序容器,访问效率高,适合存储一些常量数据,可以作为字典的键使用。
- 集合:无序,元素只出现一次,可以自动去重。
- 字典:长度可变的hash字典容器。存储的方式为键值对,可以通过相应的键获取相应的值。key支持多种类型,key必须是不可变类型且唯一。
- 列表上可以修改的,而元组不能修改。如果要增添和删除元素,只能用列表。元组被称为只读列表,即数据可以被查询,但不能被修改。若元组一旦被定义,长度和内容都是固定的,不能被修改,即不能对元组进行更新、增加和删除的操作。
- 列表用’[]'表示,元组用()表示
- 列表不能作为字典的可以,元组可以
- 如果元组中仅有一个元素,需要在元素后加上逗号。
testList = [4,2,3,1,4]print("遍历list:",end='')
for items in testList:
print(items,end=' ')
2.遍历元组
print()
print("遍历tuple:",end='')
testTuple = (5,2,1,3,4)
for items in testTuple:
print(items,end=' ')
3.遍历字典
print()
print("遍历dict:",end='')
testDict = {'a':1,'b':2}
for key,value in testDict.items():
print(key,value,end=' ')
4.遍历集合
print()
print('遍历set:',end='')
testSet = {12,4,6,5}
for items in testSet:
print(items,end=' ')
输出如下所示:
遍历list:4 2 3 1 4
遍历tuple:5 2 1 3 4
遍历dict:a 1 b 2
遍历set:4 12 5 6
三、列表、元组、集合和字典相互转换 1.列表元组转化为集合(去重)
#两个列表转集合,去重
list1 = [6,7,7,8,8,9]
set1 = set(list1)
print(set1)
输出如下所示:
{8, 9, 6, 7}
2.两个列表转字典
#两个列表转字典
list1 = ["key1","key2","key3"]
list2 = ["1","2","3"]
dict1 = dict(zip(list1,list2))
print(dict1)
输出如下所示:
{'key1': '1', 'key2': '2', 'key3': '3'}
3.嵌套列表转字典
#嵌套列表转字典
list3 = [["key1","valu1"],["key2",'value2'],['key3','value3']]
dict1 = dict(list3)
print(dict1)
输出如下所示:
{'key1': 'valu1', 'key2': 'value2', 'key3': 'value3'}
4.列表、元组转字符串
#列表、元组转字符串
list1 = ['s','a','b']
str1 = " ".join(list1)
print(str1)tup1 = ('b','t','u')
str2 = "-".join(tup1)
print(str2)
输出如下所示:
s a b
b-t-u
5.字典转化为字符串
dic1 = {'a':1,"b":2}
str1 = str(dic1)
print(type(str1))
print(str1)
输出如下所示:
{'a': 1, 'b': 2}
6.字典key和value互相转换
#字典key和value互相转换dic2 = {"a":1,"b":2}dic3 = {value:key for key,value in dic2.items()}
print(dic3)
输出如下所示:
{1: 'a', 2: 'b'}
7.字符串转换为列表
#字符串转换为列表
s = 'dstewsg'
list1 = list(s)
print(list1)
输出如下所示:
['d', 's', 't', 'e', 'w', 's', 'g']
8.字符串转元组
#字符串转元组
s = "ugjhaga;
w"
tu1 = tuple(s)
print(tu1)
输出如下所示:
('u', 'g', 'j', 'h', 'a', 'g', 'a', ';
', 'w')
9.字符串转集合
#字符串转集合
dic2 = eval("{'a':1,'age':2}")
print(dic2)
输出如下所示:
{'a': 1, 'age': 2}
10.切分字符串
#切分字符串
a = 'a b c'
a = a.split(' ')
print(a)
输出如下所示:
['a', 'b', 'c']
四、删除一个列表重复元素 1.使用集合set方式
#利用set中的元素不可重复性来去重
elements = ['a','b','e','c','b','d','a','c','f']e = list(set(elements))
print(e)
输出如下所示:
['d', 'c', 'b', 'a', 'f', 'e']
要保持列表元素的原来顺序,可以利用list类的sort方法
#利用list的sort方法保持列表原来顺序
e.sort(key=elements.index)
print(e)
输出如下所示:
['a', 'b', 'e', 'c', 'd', 'f']
2.使用字典的方式,利用字典key的唯一性
#使用字典的方式
#利用了字典的键的唯一性
elements = ['a','b','e','c','b','d','a','c','f']
e = list({}.fromkeys(elements).keys())
print(e)
python函数dict.fromkey(seq,[,value])用于创建一个新字典以序列seq中元素做字典的键,value为字典所有键对应的初始值
#python函数dict.fromkey(seq,[,value])用于创建一个新字典
#以序列seq中元素做字典的键,value为字典所有键对应的初始值
seq = ['a','b','c']
dict1 = dict.fromkeys(seq,[9,4,3])
print(dict1)
输出如下所示:
{'a': [9, 4, 3], 'b': [9, 4, 3], 'c': [9, 4, 3]}
3.列表推导的方式
#方式三:列表推导的方式
elements = ['a','b','e','c','b','d','a','c','f']
e = []
for i in elements:
if not i in e:
e.append(i)
print(e)
以上代码也可以使用列表生成式简写成
#以上代码也可以使用列表生成式简写成
elements = ['a','b','e','c','b','d','a','c','f']
e = []
[e.append(i) for i in elements if i not in e]
print(e)
4.reduce函数
- reduce函数的定义:
- reduce(function, sequence[, initial]) -> value
- function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。
#reduce函数
from functools import reduce# reduce函数的定义:
# reduce(function, sequence[, initial]) -> value
# function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。elements = ['a','b','e','c','b','d','a','c','f']
print([[]]+elements)#[[], 'a', 'b', 'e', 'c', 'b', 'd', 'a', 'c', 'f']
v = reduce(lambda x,y:x if y in x else x+[y],[[]]+elements)
print(v)
输出如下所示:
[[], 'a', 'b', 'e', 'c', 'b', 'd', 'a', 'c', 'f']
['a', 'b', 'e', 'c', 'd', 'f']
五、求两个列表的交集、差集或并集 1.for循环
a = [1,2,3,4,5]
b = [2,4,5,6,7]#交集
result = [i for i in a if i in b]
print('a与b的交集:',result)#差集,在a中但不在b中result = [i for i in a if i not in b]
print('a与b的差集:',result)#并集
result = a
for r in b:
if r not in result:
result.append(r)
print('a与b的并集:',result)
输出如下所示:
a与b的交集: [2, 4, 5]
a与b的差集: [1, 3]
a与b的并集: [1, 2, 3, 4, 5, 6, 7]
2.用set操作
#用set操作
a = [1,2,3,4,5]
b = [2,4,5,6,7]#交集
result = list(set(a).intersection(set(b)))
print('a与b的交集:',result)#差集 在a中但不在b中
result = list(set(a).difference(set(b)))
print("a与b的差集:",result)#并集
result = list(set(a).union(set(b)))
print('a与b的交集:',result)
输出如下所示:
a与b的交集: [2, 4, 5]
a与b的差集: [1, 3]
a与b的交集: [1, 2, 3, 4, 5, 6, 7]
六、反序地迭代一个序列 对序列反序,可以利用内置函数reversed()或range()来实现,也可以用扩展切片[::-1]的形式实现。序列是列表,还可以使用列表自带的reverse()方法。
- reversed()是python内置函数,参数可以是字符串、列表或元组等序列
- 利用range()方法生成序列宕反序索引,然后从最后的元素遍历到开始的元素,就可以反序输出序列的元素。range(start,stop[,step])方法的参数说明
- start:计数从start开始,默认是从0开始
- end:计数到end结束,但不包括end
- step:步长,默认为1
- sea[::-1]扩展切片方法是利用粱序列宕切片操作,切片是序列的高级特性。seq[::-1]表示反向获取seq中的所有元素,并且每次取一个。-1表示从序列宕最后一个元素反向遍历获取。
- 如果是列表序列,还可以直接用列表的reverse()方法
seq = "Hello World"#reversed()内置的函数方法
for s in reversed(seq):
print(s,end='')#输出换行
print()
输出如下所示:
dlroW olleH
2.range()函数方法
#range()函数方法
for i in range(len(seq)-1,-1,-1):
s = seq[i]
print(s,end='')
#输出换行
print()
3.[::-1]扩展切片方法
#[::-1]扩展切片方法
for s in seq[::-1]:
print(s,end='')
#输出换行
print()
4.list自带的reverse()方法
#list自带的reverse()方法
seq = [1,2,3,4,5,6]
seq.reverse()
for s in seq:
print(s,end='')
print()
输出如下所示:
654321
七、列表的sort方法和sorted方法
- sort是列表方法,只可用来对列表进行排序,是在原序列上进行修改,不会产生新的序列
- 内置的sorted方法可以用于任何迭代的对象(字符串、列表、元组、字典等)会产生一个新的序列,旧的对象依然存在,不需要旧的序列可以采用sort方法
seq = [1,3,5,4,2,6]
seq.sort()
print(seq)
输出如下所示:
[1, 2, 3, 4, 5, 6]
2.sorted()方法
seq = [1,3,5,4,2,6]
s = sorted(seq)
print(s)
输出如下所示:
[1, 2, 3, 4, 5, 6]
3.按列表a1中字典元素的键age由大到小排序
a1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]print(sorted(a1,key=lambda x:x['age'],reverse=True))
输出如下所示:
[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]
八、列表中常用的方法
方法 | 描述 |
---|---|
list.append(x) | 把一个元素添加到列表的结尾 |
list.extend(L) | 通过添加指定列表的所有元素来扩充列表 |
list.insert(i,x) | 在指定位置插入一个元素,第一个参数是准备插入到其前面的那个元素的索引。例如a.insert(0,x)会插入到整个列表之前 |
list.remove(x) | 删除列表中值为x的第一个元素。没有这样元素,就会返回一个错误 |
list.pop([i]) | 从列表的指定位置移除元素,并将其返回。没有指定索引,a.pop()返回最后一个元素。 |
list.clear() | 移除列表中的所有项,等于del a[:] |
list.index(x) | 返回列表中第一个值为x的元素的索引。没有匹配的元素就返回一个错误 |
list.count(x) | 返回x在列表中出现的次数 |
list.sort() | 对列表中的元素进行排序 |
list.reverse() | 倒排列表中的元素 |
list.copy() | 返回列表的浅复制,等于a[:] |
- list可以看作一个对象,对象有很多中方法,调用方法是:对象.方法,append是这个对象的方法
- 对象可以理解为人,方法append类似这个人可以跑步、吃饭、打球
#list可以看作一个对象,append是这个对象的方法
# 对象可以理解为人,方法append类似这个人可以跑步、吃饭、打球
list1 = ['a','b','c']list1.append('d')print(list1)list1.extend(['1','2','3'])
print(list1)
输出如下所示:
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', '1', '2', '3']
九、列表生成式 用来创建列表的表达式就是列表生成式,也被称为列表推导式。
- 每个列表生成式都在for之后跟一个表达式,然后有零到多个for或if子句。返回结果是一个根据表达从其后的for和if上下文环境中生成出来的列表。
- 列表生成式的语法:[表达式 for 循环]
list1 = [x+1 for x in range(1,8)]
print(list1)
输出如下所示:
[2, 3, 4, 5, 6, 7, 8]
十、字典内置函数
函数及描述 | 描述 |
---|---|
len(dict) | 计算字典中的元素个数,键的总数 |
str(dict) | 输出字典,以可打印的字符串表示 |
type(variable) | 返回输入变量类型,如果变量是字典就返回字典类型 |
radiansdict.clear() | 删除字典内所有元素 |
radiansdict.copy() | 返回一个字典的浅复制 |
radiansdict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
key in dict | 键在字典dict里返回True,否则返回False |
radiansdict.items() | 以列表返回可遍历的(键、值)元组数组 |
radiansdict.keys() | 返回一个迭代器,可以使用list()转换为列表 |
radiansdict.setdefault(key,default=None) | 和get类似,键不存在字典中,将会添加键并将值设为default |
radiansdict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
radiansdict.values() | 返回一个迭代器,可以使用list()转换为列表 |
pop(key[,default]) | 删除字典给定键key所对应的值,返回值为被删除的值。key值必须给出,否则,返回default值 |
popitem() | 随机返回并删除字典中的一对键和值(一般删除末尾对) |
dic = {"name":"刘备","age":19}
dic.pop("name")
print(dic)dic = {"name":"刘备","age":19}
del dic["name"]
print(dic)
输出如下所示:
{'age': 19}
{'age': 19}
合并两个字典
dic1 = {"name":"刘备","age":19}dic2 = {"hobby":"足球","money":100}dic1.update(dic2)
print(dic1)
输出如下所示:
{'name': '刘备', 'age': 19, 'hobby': '足球', 'money': 100}
十一、集合常见内置方法 集合常见内置方法如下表所示:
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 复制一个集合 |
difference() | 返回多个集合的差集 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
isdisjoint() | 判断两个集合是否包含相同的元素,没有则返回True,否则返回False |
issubset() | 判断指定集合是否为该方法参数集合的子集 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
list1 = [1,2,3]
list2 = [3,4,5]set1 = set(list1)
set2 = set(list2)print(set1&set2)
print(set1^set2)
【日常分享专栏|python系列之(列表、元组、集合、字典用法详解)】输出如下所示:
{3}
{1, 2, 4, 5}
推荐阅读
- C#元组解析和用法详细指南
- 蓝桥杯|蓝桥杯——阶乘计算
- python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
- 爪哇|【集合】
- Python系列|数据结构与算法笔记(五)——队列(FIFO队列、双端队列)
- 可视化|首次公开,用了三年的 pandas 速查表!
- 高等数学|点与点集(边界点与聚点的关系【高等数学】)
- python|100天精通Python(基础篇)——第28天(标准库os)
- 【Python】系列|【Python】面试官:元组列表都分不清,回去等通知pa