1.集合定义:不同元素组成,元素都是无序的,元素是不可变类型/可哈希类型(可作为字典的键)(数字、字符串、元组),去重特性
定义方式:大括号&逗号 {1,2,3,4}
s = set(可迭代类型)
s = set('hello')
print(s)
s = set(['cyx', 'cyx', 'gb'])
print(s)
补:type()查看类型
集合的分类
可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其它集合的元素
不可变集合(frozenset):不 可添加和删除元素
集合等价与不等价
print(set('cyx') == set('ypp'))
print(set('cyx') != set('ypp'))
2.集合的内置方法
a.add 添加
s = {1, 2, 3, 4}
s.add('s')
print(s)
b.clear 清空
s = {1, 2, 3, 4}
s.clear()
print(s)
c.copy 拷贝
d.pop随机删
s = {1, 2, 3}
p = s.pop()
print(s)
print(p)
remove指定删,删除元素不存在会报错
del可以删除任何东西
s = {1, 2, 3}
del s
print(s)#会报错
discard指定删,删除元素不存在时,不会报错
s = {'s', 1, 2, 3, 4}
s.pop()
print(s)
s = {'l', 1, 2, 3, 4}
s.remove('l')
print(s)
s = {'l', 1, 2, 3, 4}
s.discard('l0')
print(s)
e.求交集
用for循环求交集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw']
python_linux_l = []
for i in python_l:
if i in linux_l:
python_linux_l.append(i)
print(python_linux_l)
intersection求交集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.intersection(l_s))
a & b求交集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s & l_s)
f.求并集
union求并集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.union(l_s))
|求并集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s | l_s)
g.求差集
difference求差集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.difference(l_s))#in p_s but not in l_s
-求差集
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s - l_s)
h.交叉补集/对称差集/反向交集 :先合到一起,在减去共有的
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.symmetric_difference(l_s))
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s ^ l_s)
i.difference_update求完差集后更新
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
p_s.difference_update(l_s)
print(p_s)
j.isdisjoint 判断是否不相交
python_l = ['lcg', 'szw', 'zjw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.isdisjoint(l_s))
k.判断是否是子集
python_l = ['lcg', 'szw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.issubset(l_s))
print(set('cyx') < set('cyx'))
print(set('cyx') < set('cyxypp'))
l.判断是否是父集
python_l = ['lcg', 'szw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
print(p_s.issuperset(l_s))
也可以用>判断
m.update更新多个值,add只能更新一个值
s = {1, 2, 3}
s.update('cyx')#cyx会被当成序列一个一个添加而不是整体添加
print(s)
s = {1, 2, 3}
s.update([12, 'ypp'])
print(s)
python_l = ['lcg', 'szw']
linux_l = ['lcg', 'szw', 'cyx', 'ypp']
p_s = set(python_l)
l_s = set(linux_l)
p_s.update(l_s)
print(p_s)
n.集合是可变的,可以用frozenset定义不可变集合
s = frozenset('hello')
print(s)
o.set()可以简单去重,但是元素顺序会变
names = ['cyx', 'ypp', 'cyx']
s = set(names)
names = list(s)
print(names)
3.字符串格式化
a.百分号字符串拼接
msg = 'i am %s my hobby is reading' % 'cyx'
print(msg)
msg = 'i am %s my hobby is %s' % ('cyx', 'reading')
print(msg)
%s是万能的,可以接收任何值
%d代表整形数字,只能接收数字
msg = 'i am %(name)s age %(age)d' % {'name': 'cyx', 'age': 18}
print(msg)
msg = 'i am %(name)-60s age 18' % {'name': 'cyx'}
print(msg)
msg = 'i am %(name)+60s age 18' % {'name': 'cyx'}
print(msg)
msg = 'i am \033[45;1m%(name)+60s\033[0m age 18' % {'name': 'cyx'}
print(msg)
b.打印浮点数
msg = 'percent %f' % 99.976234
print(msg)
msg = 'percent %.2f' % 99.976234
print(msg)
c.打印百分比
msg = 'percent %.2f %%' % 99.976234
print(msg)
msg = 'i am %(pp).2f' % {'pp': 123.45687}
print(msg)
print('root', 'x', '0', '1', sep=':')
d.format字符串格式化
a = 'i am {}, age {}, {}'.format('cyx', 18, 'ypp')
print(a)
不一一对应会报错
a = 'i am {}, age {}, {}'.format('cyx', 18)
print(a)
按索引取值
a = 'i am {2}, age {1}, {0}'.format('cyx', 18, 'ypp')
print(a)
a = 'i am {1}, age {1}'.format('cyx', 18, 'ypp')
print(a)
字典方式取值
a = 'i am {name}, age {age}, really {name}'.format(name='seven', age=18)
print(a)
a = 'i am {name}, age {age}, really {name}'.format(**{'name': 'seven', 'age': 18})
print(a)
a = 'i am {0[0]}, age {1[2]}, really {1[1]}'.format([1, 2, 3], [5, 6, 8])
print(a)
a = 'i am {:s}, age {:d}, really {:f}'.format('cyx', 12, 78.906)
print(a)
a = 'i am {:s}, age {:d}'.format(*['cyx', 12])
print(a)
a = 'i am {name:s}, age {age:d}'.format(name='seven', age=18)
print(a)
a = 'i am {name:s}, age {age:d}'.format(**{'name': 'seven', 'age': 18})
print(a)
b二进制,o八进制,d整形,x十六进制,X十六进制(传大写的ABCD),%显示百分比(默认显示小数点后六位)
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
print(tpl)