集合
-
集合:python数据类型
集合:(重要点)去重,集合关系
关键字:set
空集合:set( )
s = {1,2,3,4} print(type(s)) set lst = ["海绵","新力","海绵"] print(set(lst)) {'海绵', '新力'} 把列表转换成集合,输出结果 {'海绵', '新力'}
集合中的元素要求是不可变的并且还是唯一的,我们就利用它是唯一来做去重
集合的元素是不可变的(可哈希)
具有有唯一特性才做到去重 # 无序,可变,可迭代
#给这一行代码进行去重 (1)
lst = [1,2,3,4,1,1,12,33,3,421,21,12,3]
print(list(set(lst)))
# 容器:能够存储数据的就是容器
# list,tuple,dict,set
既然是可变数据类型,就能够增删改查
1、增(2种)
# s = set()
# s.update('alex') # 迭代 添加#
# s.add("alex") # 添加#
print(s)
2、删 (3种)
# s = {"a","b",3,"c"}
# print(s.pop()) #随机删除 pop具有返回值 pop中无法指定索引
# s.remove("b") #指定元素删除
# s.clear() #清空 后的显示是空集合 set()
# print(s)
3、改(2种)
# 改:
# 1.先删后加
# 2.转换数据类型进行修改
4、查(1种)
# 查:
# for循环
s = {"a","b",3,"c"}
for i in s:
print(i)
集合关系:
交集,并集,差集,补集
python = {"海","孙","力","大圣"}
linux = {"海","大圣","meet","alex"}
print(python | linux) # 并集 | == or
结果:{'孙', '力', 'alex', '大圣', '海', 'meet'}
print(python & linux) # 交集 shift + 7 & == and
结果:{'海', '大圣'}
print(python - linux) # 差集
结果:{'孙', '力'}
print(linux - python)
结果:{'alex', 'meet'}
print(python ^ linux) # 补集 反差集 对称集 shift + 6
结果:{'孙', '力', 'alex', 'meet'}
# python = {"海绵","孙一帆","岳新力","大圣"}
# linux = {"海绵","大圣"}
# 超级(父集): 判断python是不是linux的超集
# print(python > linux) # 大于号 输出的是True 布尔值
#子集: 判断python是不是linux的超集
# print(linux < python) # 小于号 输出的是True 布尔值
基础数据类型补充
**int整型 **
a=10 #1010(二进制)
print(a.bit_length()) #求最大位数
str 字符串
s = "alex wusir"
s1 = s.capitalize( ) 首字母大写
s1 = s,title( ) 每个单子首字母大写
s1 = s.index("b") 通过元素查找索引,查找不到时报错
s1 = s.find("b") 通过元素查找索引,查找不到时返回 -1
s1 = s.center(20) 居中
s1 = s.center(20,"_") 居中,填充
s1 = s.wapcase() 大小写转换
list列表
lst = [1,2,3,4,6,5]
print(lst[ : :-1]) 倒序 #新开辟一个内存地址
lst.reverse() 倒序 #原地修改
lst.sort() #排序 默认时升序
lst.sort(reverse = True) 降序
例题: 将lst2中的元素逐个添加到lst1中
lst1 = [1,2,3,[4]]
lst2 = [4,5,6]
方法一 :lst.extend(lst2)
print(lst1)
方法二:
print(lst1+lst2) #新开辟一个空间
例子:
# 列表进行乘法时元素都是共用的
lst = [1,2,[]]lst1 = lst * 2
lst1[-1].append(8)
print(lst1) # 1,2,[8],1,2,[8]
列表和元组进行乘法时元素都是共用,故lst1 也被修改了
dict 字典
dic = {}
dic = dic.fromkeys("abc",12)
print(dic) #{'a': 12, 'b': 12, 'c': 12}
批量创建键值对 参数1:键(可迭代) 参数2:值(共用)
坑 当可变数据类型当作 值 时会有坑
dic = {}
dic = dic.fromkeys("abc",[])
# 批量创建键值对 参数1:键(可迭代) 参数2:值(共用)
dic["c"].append(8)
print(dic)
# 解决办法
dic["c"] = [8] 单独修改c 重新开辟空间,赋值一个列表为8的
print(dic)
字典的定义:
dic = {} dict() 都是空字典的意思
```print(dict(k=1,v=2,b=4)) ````结果 {'b': 4, 'v': 2, 'k': 1}``
例题:
print(dict([(1,2),(4,5),(7,8)]))
输出结果{1:2,4:5,7:8}
# 类型转换:
# False
# print(bool(0))
# print(bool())
# print(bool(None))
# print(bool(""))
# print(bool([]))
# print(bool(()))
# print(bool({}))
# print(bool(set()))
# 只要是空的就False
tuple(list)
list(tuple) 列表和元组可相互转换
set(list)
list(set) 列表和集合可相互转换
set(tuple)
tuple(set) 集合和元组可相互转化
int(str) # 字符串中必须全部都是阿拉伯数字
str(int) # str(dict)# str(list)#str(tuple)`# str(int)# str(set)# str(bool)
str可转化成任何数据类型
基础数据类型总结
int 有序(不支持索引) 不可变 不可迭代 取值方式 |
---|
bool 不可变 不可迭代 直接查看 |
str 有序(支持索引) 不可变 可迭代 直接查看 |
tuple 有序(支持索引) 不可变 可迭代 通过索引查看 |
list 有序(支持索引) 可变 可迭代 通过索引查看 |
dict 无序(不支持索引) 可变 可迭代 通过键查看值 |
set 无序(不支持索引) 可变 可迭代 直接查看 |
二、循环删除的坑
列表循环删除的坑
lst = [11,22,33,44,55]
for 循环
将列表中的元素删了
错误示例:
for i in lst:
lst.remove(i)
print(lst)
分析原因: for的运⾏过程. 会有⼀个指针来记录当前循环的元素是哪⼀个, ⼀开始这个指针指向第0 个.
然后获取到第0个元素. 紧接着删除第0个. 这个时候. 列表有补进的功能,原来是第⼀个的元素会⾃动的变成 第0个.
然后指针向后移动⼀次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.所以不能用 for in lst: lst.pop() 或者 lst.remove(i)
正确方式一
for i in range(len(lst)):
lst.pop(0)
正确方式二
lst = [11,22,33,44,55]
lst1 = lst.copy()
for i in lst1:
lst.remove(i)
print(lst)
把索引为奇数的删除
lst = [11,22,33,44,55,66]
lst1 = lst.copy()
for i in lst1:
if lst1.index(i) %2 == 1:
lst.remove(i)
print(lst)
字典循环删除的坑
删除字典中的键值对
dic = {"key":1,"key2":2}
dic1 = dic.copy()
for i in dic1:
del dic[i]
print(dic) 报错 字典在循环时不能进行删除操作
如果想要循环删除,可以 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除
dic = {'k1': 'alex', 'k2': 'wusir', 'k3': '大宝哥'}
dic_del_list = []
# 删除key中带有'k'的元素
for k in dic:
if 'k' in k:
dic_del_list.append(k)
for el in dic_del_list:
del dic[el]
print(dic)
# 使用两个字典进行删除
dic = {'k1': 'alex', 'k2': 'wusir', 'k3': '大宝哥'}
dic1 = dic.copy()
for i in dic1:
dic.pop(i)
print(dic)
二次编码:
python3内存中使用的就是 unicode
硬盘中存储时选择的编码方式 gbk utf-8
s="你好"
s1 =s.encode("utf-8") 编码
print(s1)
s2 =s1.decode("utf - 8") 解码
用什么编码 就要用什么解码