【set】set里面的元素是不允许重复的,set里面的元素是没有顺序的,set元素是区分大小写的
【set创建】使用set()
,并传入一个list,list的元素将会被转换成set的元素
【读取set元素】
'Alice' in name_set # ==> True
【添加set元素】 如果添加一个已经存在的元素,不会报错,也不会改变什么
单个添加:
name_set.add('Gina')
多个添加:直接添加list
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
new_names = ['Hally', 'Isen', 'Jenny', 'Karl']
name_set = set(names)
name_set.update(new_names)
【删除set的元素】
方法一:remove()方法:如果remove的元素不在set里面的话,那么将会引发错误,所以需要先判断是否在里面再读取
方法二:使用discard()方法删除元素,当元素不存在时,使用discard()并不会引发错误
【清楚set的元素】清除所有元素的方法clear()
name_set.clear()
print(name_set) # ==> set([])
【set集合的子集和超集】
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 判断s1是否为s2的子集
s1.issubset(s2) # ==> True
# 判断s2是否为s1的超集
s2.issuperset(s1) # ==> True
【set判断集合是否重合】isdisjoint()
方法,可以快速判断两个集合是否有重合,如果有重合,返回False,否则返回True。
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
s1.isdisjoint(s2) # ==> False,因为有重复元素1、2、3、4、5
【dict删除】pop()方法需要指定需要删除的元素的key,并返回对应的value,当key不存在时,同样会引起错误。
【dict的keys】可以返回dict的所有key
for key in d.keys():
print(key)
# ==> Alice
# ==> Bob
# ==> Candy
【dict的values】获取dict所有的value
for key in d.values():
print(key)
# ==> [50, 61, 66]
# ==> [80, 61, 66]
# ==> [88, 75, 90]
【dict清除】clear()函数
d.clear()
print(d) # ==> {}
【dict的特点】
查找速度快:无论dict有10个元素还是10万个元素,查找速度都一样
有序与无序:缺点是占用内存大,还会浪费很多内容,有序慢但是占用小
key不可变:tuple可以作为dict的key,但是list不可以作为dict的key,否则将会报错。
遍历dict:
方法一:
for key in d: # 遍历d的key
value = d[key]
if value > 60:
print(key, value)
方法二:
for key, value in d.items():
if value > 60:
print(key, value)
# ==> Candy 75
# ==> David 86
方法三:打印出来的是完整的一个dict;
1.同学的近三次成绩如下,请把每个同学的每次成绩依次输出。 [用所有能想到的语句写出正确的结果,再对比更优的代码]
# Enter a code
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]}
for key,value in d.items():
for score in value:
print(key,score)
2.请使用set表示班里面的五个同学。
'Alice', 'Bob', 'Candy', 'David', 'Ellena'
# Enter a code
L = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
s = set(L)
print(s)
3.由于name_set不能识别小写的名字,请改进name_set,是小写的名字也能判断在name_set里面。
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena'] name_set = set(names)
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena', 'alice', 'bob', 'candy', 'david', 'ellena']
name_set = set(names)
print(name_set) # ==> set(['ellena', 'alice', 'Candy', 'Alice', 'candy', 'Ellena', 'Bob', 'David', 'bob', 'david'])
4.请使用两种方式往空的set中添加以下名字:['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl']。
# coding=utf-8
s=set()
s.add('Jenny')
L=['Jenny', 'Ellena', 'Alice', 'Candy', 'David', 'Hally', 'Bob', 'Isen', 'Karl']
s.update(L)
print(s)
5.针对以下set,给定一个list,对于list里面的每个元素,如果set中包含这个元素,就将其删除,否则添加到set里面去。
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] S = set([1, 3, 5, 7, 9, 11])
# Enter a code
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
S = set([1, 3, 5, 7, 9, 11])
a = 0
for ch in L:
if ch in S:
S.remove(ch)
else:
S.add(L[a])
a = a + 1
print(S)
6.已知两个集合s1、s2,请判断两个集合是否有重合,如果有,请把重合的元素打印出来。
s1 = set([1, 2, 3, 4, 5]) s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# Enter a code
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
if s1.isdisjoint(s2):
print('no')
else:
for ch in s1:
if ch in s2:
print(ch)