Python自学笔记4——数据结构之元组、集合与字典

元组

元组(tuple)的结构与列表类似,可以存储不同类型的数据。但元组中的元素是不可变的,一经创建就不能再做修改,不能再次赋值。因此元组没有append(),insert(),remove()之类的方法。

元组的适当使用能够让代码更加安全,防止错误赋值导致重要对象的改变。

a=(1,2,"Genshin")   #创建元组a
print(a[0])         #a[0]=1
集合

和数学上的集合(set)一样,集合具有无序性。在集合中没有重复的元素,因此可用于去除相同的元素。集合可以进行数学上的交、并、差等运算。集合的创建如下:

a=set()   #创建空集合
a={1,2,3} #创建集合,元素为1,2,3
#不能用a={}创建空集合!!!
#可以把列表或元组转化为集合
a=set([1,2,3])
a=set((1,2,3))

若赋值s={1,2,3,1},s会自动去除重复的元素,s={1,2,3}。集合的其他运算如下表:

函数其他表示说明
a.add(x)把元素x加入集合a
a.remove(x)把元素x从集合a删除
a.union(b)a|b求a∪b
a.intersection(b)a&b求a∩b
a.difference(b)a-b差集,在a中而不在b中的元素
a.symmetric_difference(b)a^b对称查,a∪b-a∩b
a.issubnet(b)判断a是否是b的子集,返回bool型
a.issupernet(b)判断b是否是a的子集,返回bool型
a.isdisjoint(b)判断a和b是否有公共元素,有为True

无论对列表、元组还是集合,都可以用"a in b"查找某元素是否在数据结构中:

a={1,2,3}
b=[1,2,3]
c=(1,2,3)
if 1 in a:
    print("1 in a")
if 1 in b:
    print("1 in b")
if 1 in c:
    print("1 in c")
字典

字典(dict)在C/C++中也被称为哈希映射或散列表,用于描述数据的键与值之间的映射关系。字典的应用能显著降低时间和空间复杂度。

设想你要用C语言存储学号101~109的9名同学的考试成绩,最原始的做法是开辟一个二维数组,两个维度分别存储学号和成绩。当查找时依次遍历数组,这种算法的时间复杂度是O(n),空间消耗是2n。

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]
101102103104105106107108109
成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9

但如果使用哈希表,可以把学号101~109通过函数Hash(x)=x-101映射到0~8(恰好用数组下标表示),这时只需要开辟一个一维数组,并用a[0]存储101号同学成绩,a[1]存储102号同学成绩……访问时把x带入Hash()可直接得到它的存储位置,这种算法的时间复杂度是O(1),空间消耗是n。比起前者得到了极大的改善!Hash(x)被称为哈希函数或散列函数。

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]
成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9

Python中的字典以键值对的方式存储以上信息,"101","102"和"103"称为键,成绩称为值。

{"101":成绩1,"102":成绩2,"103":成绩3}

字典的创建方式如下:

a={}   #创建空字典
b=dict([("圆皮","原神"),("皱皮","明日方舟")])
c={'圆皮': '原神', '皱皮': '明日方舟'}
print(b)   #b=c={'圆皮': '原神', '皱皮': '明日方舟'}
#还可以结合for循环和zip函数创建字典
keys=["圆皮","皱皮"]
value=["原神","明日方舟"]
D1={}
for k, v in zip(keys, value):
    D1[k]=v
#或简写为:
D2=dict(zip(keys, value))

对字典索引有两种方法:

print(D1["圆皮"])   #打印“原神”
print(D1["农批"])   #不存在这个键,报错

print(D1.get("圆皮"))  #打印“原神”
print(D1.get("圆皮", 20))  #设20为默认值,有"圆皮"键打印值"原神"
print(D1.get("农批", 20))  #没有这个键,打印默认值20,

可以用in判断是否存在这个键,可以用keys()和values()查看所有的键和值:

print("圆皮" in D1)      #打印"True"
print(D1.keys())         #打印["圆皮", "皱皮"]
print(D1.values())       #打印["原神","明日方舟"]

可以更新或删除键:

D1.update({"原皮":"Genshin"})
print(D1)       #{"圆皮":"原神","皱皮":"明日方舟","原皮":"Genshin"}
del D1["原皮"]
print(D1)       #{"圆皮":"原神","皱皮":"明日方舟"}
D1.pop("原皮")
print(D1)       #{"皱皮":"明日方舟"}
D1.clear()      #清除全部元素,返回空列表
关于JSON

JSON(JavaScript Object Notation)是一种数据交换格式,类似的还有XML、HTML等。JSON以键值对的方式存储了数据的属性和值,有利于进行数据交换和读取。一些常见的应用有config配置文件、网络传输、数据集等。例如:

 在Python中使用JSON库读取json文件,将其转换为字典(键值对)进行处理:

import json

with open(".\config.json", "r", encoding="utf-8") as f:
    config = json.load(f)
base_path=config['data_path']

可以利用json库中的.load()函数把字符串转换为json格式,用.dumps()函数把json转换为字符串:

import json

s1='''{"圆皮":"原神","皱皮":"明日方舟"}'''
dict_=json.loads(s)    #dict_为JSON格式
s2=json.dumps(dict_)   #s1=s2,为字符串格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,今天我们来学习Python中的字典(Dictionary)。 字典是一种无序的、可变的数据类型,它以键值对(key-value)的形式存储数据,其中键(key)必须是唯一的,而值(value)可以是任意数据类型。字典用花括号{}表示,每个键值对之间用逗号隔开。 下面是一个简单的字典示例: ``` my_dict = {'name': '张三', 'age': 18, 'gender': '男'} ``` 这个字典中,'name'、'age'、'gender'就是键,而'张三'、18、'男'就是相应的值。 可以使用`dict()`函数来创建一个字典,也可以使用`{}`来创建一个空字典。 接下来,我们来看一些常用的字典操作。 1. 访问字典元素 可以通过键来访问字典中的元素,例如: ``` print(my_dict['name']) # 输出:张三 ``` 如果键不存在,则会抛出KeyError异常。 2. 修改字典元素 可以通过键来修改字典中的元素,例如: ``` my_dict['age'] = 20 print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男'} ``` 3. 添加字典元素 可以通过键来添加字典中的元素,例如: ``` my_dict['address'] = '北京市' print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男', 'address': '北京市'} ``` 4. 删除字典元素 可以通过键来删除字典中的元素,例如: ``` del my_dict['gender'] print(my_dict) # 输出:{'name': '张三', 'age': 20, 'address': '北京市'} ``` 5. 字典长度 可以使用`len()`函数来获取字典的长度,例如: ``` print(len(my_dict)) # 输出:3 ``` 6. 字典遍历 可以使用`items()`方法来遍历字典中的每一个键值对,例如: ``` for key, value in my_dict.items(): print(key, value) ``` 输出: ``` name 张三 age 20 address 北京市 ``` 通过上述操作,我们可以初步了解字典的基本用法。在实际应用中,字典是非常重要的数据类型,它可以用来存储和处理各种复杂的数据结构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值