在学习列表时,你会发现它的元素是可重复的。如果要去除重复内容,用集合就对了。
4.3 集合 集合(set)和其他编程语言类似, 是一个无序不重复元素的数据结构。它的基本功能包括关系测试和消除重复元素,还可以计算交集、差集、并集等。set既然是无序的,那便不记录元素位置或者插入点,也不支持对元素的排序操作。 1.集合声明 集合可通过大括号{}或set()进行声明。但用{}声明时,一定要有元素,否则表示的是字典类型。集合元素可以同时存在不同的数据类型,重复的元素会被合并。
set1 = {1 , 2 , 3 }print (type(set1 ), set1 )set1 = set()print (type(set1 ), set1 )set1 = {"历史" , 100 , 25 .68 }print (set1 )
输出结果
<class 'set' > {1 , 2 , 3 } <class 'set' > set () {25.68 , '历史' , 100 }
2.新增 通过add(x)方法添加新的元素,如果元素已经存在,不会添加。
p = {"Java" , "C#" } p.add ("Python" )print (p)
输出结果
通过update(seq)方法在原集合上一次性添加多个序列的多个值,重复的值会被合并。
set1 = {1 , 2 , 3 }set2 = {4 , 5 , 6 }set3 = {5 , 0 , 2 }set1 .update(set2 , set3 )print (set1 )
输出结果
3.删除 通过pop() 删除集合里的元素 。在开发工具里测试多次,删除的元素是随机的,不一定是最后一个。
# 用pop ()删除元素 set1 = {"Android" , "iOS" , "Python" , "C#" } set1.pop ()print (set1)
输出结果
{'Python', 'Android', 'C#'}
remove(x) 删除x指定的一个元素,如若指定的x在集合里不存在,会报错。删除不会返回值。如果要指定删除的内容,即使不存在也不会报错的话,可用discard(x)方法。
letters = {"a" , "b" , "c" , "d" } letters.remove ("a" )print (letters) letters.discard("f" )print (letters)
输出结果
{'b', 'd', 'c'} {'b', 'd', 'c'}
通过clear()方法清空集合内容。 del set 删除整个集合,删除后集合不能再访问。
number = {5 , 6 , 7 , 8 }number .clear()print (number)del number
输出结果
4.访问 可用in关键字判断元素是否存在,用not in判断元素是否不存在。
lang = {"Chinese" , "English" , "French" , "German" }print ("English" in lang)print ("Japanese" not in lang)
输出结果
用max(set) 返回集合元素最大值,min(set) 返回集合元素最小值。
number = {5 , 5 , 6 , 7 , 8 }max_v = max(number)print (max_v)min_v = min(number)print (min_v)
输出结果
在遍历集合时,经常会用到集合长度,可用len(set) 计算集合元素个数(即集合长度)。可直接用for循环遍历元素的内容。集合是无序的,不可以用下标的方式进行访问。
number = {1 , 3 , 4 , 6 }length = len(number ) print(length )for n in number : print(n)
输出结果
5.交叉 两个集合之间会产生交集、并集、差集的情况。intersection()方法找出交集内容,union()方法获得并集内容, difference()返回集合的差集。可用issubset()判断指定集合是否为该方法参数集合的子集,issuperset()判断是否包含了指定集合的内容,是就返回True,否则返回False。
n1 = {1 , 3 , 4 }n2 = {1 , 4 }print (n1 .intersection(n2 ))print (n1 .union(n2 ))print (n1 .difference(n2 ))print (n2 .issubset(n1 ))print (n1 .issuperset(n2 ))
输出结果
{1 , 4 } {1 , 3 , 4 } {3 }True True
6.转换 通过set()方法可把字符串、列表、元组转为集合。
s = "string" set1 = set (s)print (set1) lst = [1, 3, 4] set2 = set (lst)print (set2) t = ("a" , "b" , "c" ) set3 = set (t)print (set3)
输出结果
{'g', 't', 'n', 'r', 's', 'i'} {1 , 3 , 4 } {'c', 'b', 'a'}
如果集合内容全是字符串,可直接通过join()方法将集合转成字符串。如果内容有其他数据类型,通过join(map(str, set))的方式转换。
# 集合(全字符串内容)转为字符串 set1 = {"O" , "K" , "!" }print ("" .join (set1))# 有浮点数内容 set1 = {100.66 , "K" }print ("" .join (map(str , set1)))
输出结果
奥力给,集合到这就说完了。如果你觉得还不过瘾,那就转发出去。不是我吹牛,以我的资历和文凭,将来你所在城市的大街,都归我扫,前提,是我能用字典查到你所在的城市。
4.4 字典 字典(Dictionary)是由键和对应值成对组成的数据结构,它通常也被称为映射,或者叫关联数组,也有叫哈希表的。其中值可以取任何数据类型,但键必须是不可变的并且是唯一的,如字符串,数字或元组。 1.字典声明 字典可通过大括号{}或dict()进行声明。里面没有元素时,为空字典。字典的每个键值 key=>value 对用冒号 : 分割。字典元素可以同时存在不同的数据类型。键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
d = {}print (type (d), d) d = dict ()print (type (d), d) months = {"Jan" : 1 , "April" : 4 }print (months) weekday = dict ({1 : "Mon" , "2" : "Tues" })print (weekday)
输出结果
<class 'dict' > {} <class 'dict' > {} {'Jan' : 1 , 'April' : 4 } {1 : 'Mon' , '2' : 'Tues' }
2.增改 字典中的键不可改变,值可以。用dict[key]的方式添加新的内容,如果指定key已经存在,则修改对应的值内容。用dict.setdefault(key, default=None)的方式添加内容,可以key不存在,就添加,否则不做任何操作。
weekday = {0 : "Sun" , 1 : "Mon" } print(weekday )weekday [2 ] = "Tues" print(weekday )weekday .setdefault(3 , "Wed" ) print(weekday )
输出结果
{0 : 'Sun' , 1 : 'Mon' } {0 : 'Sun' , 1 : 'Mon' , 2 : 'Tues' } {0 : 'Sun' , 1 : 'Mon' , 2 : 'Tues' , 3 : 'Wed' }
通过update(dict)方法在字典末尾一次性追加另一个字典的内容。
weekday = {0 : "Sun" , 1 : "Mon" }weekday .update({2 : "Tues" , 3 : "Wed" })print (weekday)
输出结果
{0 : 'Sun' , 1 : 'Mon' , 2 : 'Tues' , 3 : 'Wed' }
3.删除 通过pop(key) 删除指定key对应的内容,返回值。如果指定的key不存在,会报错。
student = {"name" : "高强" , "age" : 16, "class" : "三一班" } v = student.pop("class" )print (student)print (v)
输出结果
{'name': '高强', 'age': 16 } 三一班
可通过del dict[key] 删除指定key对应的内容 , 如果key不存在,会报错。del dict 删除整个字典, 删除后无法再访问。另外可通过clear()清空字典内容。
student = {"name" : "高强" , "age" : 16 , "class" : "三一班" }del student["class" ]print (student) student.clear()print (student)del student
输出结果
{'name': '高强', 'age': 16 } {}
4.访问 通过dict.get(key, default=None)访问字典元素的值,如果指定的key不存在,返回默认值。 也可以通过dict[key]的方式访问字典的元素值,如果key不存在,会报错。
student = {"name" : "高强" , "age" : 16, "class" : "三一班" }print (student.get ("name" ))print (student["age" ])
输出结果
可用in判断key是否存在,是返回True,否则返回False。not in为相反方式。
weekday = {"Sun" : 0 , "Sat" : 6 , "Fri" : 5 }if "Sun" in weekday : weekday .pop("Sun" ) print(weekday )
输出结果
5.遍历 字典由键值对组成,可用len(dict) 计算字典键的个数(即字典长度),可用keys()方法获取字典的所有键内容并遍历,可用values()方法获取字典的所有值内容并遍历。如果要同时获取键和值的所有内容,可用items()方法。
weekday = {"Sun" : 0, "Sat" : 6, "Fri" : 5}print (len(weekday))for k in weekday.keys(): print (k)for k in weekday.values(): print (k)for k, v in weekday.items(): print (k, v)
输出结果
3 Sun Sat Fri 0 6 5 Sun 0 Sat 6 Fri 5
6.转换 开发程序的过程中,经常会用到json数据,而json可与dict字典进行转换。用dumps()函数将dict数据转化成json数据,用loads()函数将json数据转化成dict数据。
# 引入json模块 import json# 字典内容转为json dict1 = {"name" : "cow" , "age" : 22 , "gender" : "male" }json_data = json.dumps(dict1)print (type (json_data ), json_data)# json内容转为字典 json_data = '{"id" : "007" , "name" : "007" , "email" : "123@xx.com" }'dict1 = json.loads(json_data)print (type (dict1 ), dict1)
输出结果
<class 'str' > {"name" : "cow" , "age" : 22 , "gender" : "male" } <class 'dict' > {'id' : '007' , 'name' : '007' , 'email' : '123@xx.com' }
好了,有关数据结构的内容讲完了。