set
# 不重复特点:
list1 = [3,5,8,9,1,8,4,2,5,8,9]
# 声明集合: set
s1 = set() # 创建空集合,只能使用set()
s2 = {1,3,7} # 字典: {key:value,key:value,....} 集合 {元素1,元素2,元素3,...}
print(type(s1)) #<class 'set'>
print(type(s2)) #<class 'set'>
#应用: 如果将一个列表快速去重 set()
s3 = set(list1)
print(s3) # {1, 2, 3, 4, 5, 8, 9}
# 增删改查:
# 1. 增加 s1 = set()
s1.add('hello')
s1.add('小猪佩奇')
s1.add('lucy')
print(s1) #{'hello', '小猪佩奇', 'lucy'}
#s1 = set() # 创建空集合,只能使用set()
# add() 添加一个元素
# update() 可以添加多个元素,
t1 = ('XKS','HE')
s1.update(t1)
print(s1) #{'小猪佩奇', 'lucy', 'XKS', 'hello', 'HE'}
s1.add(t1)
print(s1) #{('XKS', 'HE'), '小猪佩奇', 'lucy', 'XKS', 'hello', 'HE'}
#2. 删除 remove 如果元素存在则删除,不存在则报错keyError
# pop 随机删除(一般删除第一个元素) clear。。。
# dicard() 类似remove() 在移除不存的元素的时候不会报错。
s1.remove('XKS')
print(s1) #{('XKS', 'HE'), 'hello', 'HE', 'lucy', '小猪佩奇'}
s1.pop()
print(s1) #{'小猪佩奇', ('XKS', 'HE'), 'HE', 'lucy'}
s1.pop()
print(s1) #{'lucy', ('XKS', 'HE'), '小猪佩奇'}
s1.clear() # 清空
print(s1) #set()
'''
1. 产生了10个1~20的随机数,去除里面的重复项
2. 键盘输入一个元素,将此元素从不重复的集合中删除
'''
difference() intersection() union() symmetric_difference()
'''
已知两个列表:
l1 = [5,1,2,9,0,3]
l2 = [7,2,5,7,9]
找出两个列表的不同元素
找出两个列表的共同元素
'''
l1 = [5,1,2,9,0,3]
l2 = [7,2,5,7,9]
s1 = set(l1)
s2 = set(l2)
# 对称差集
result = (s1 | s2) - (s1 & s2)
print(result) #{0, 1, 3, 7}
result = s1 ^ s2 # 两个列表中不一样元素 symmetric_difference()
print(result) #{0, 1, 3, 7}
'''
difference_update()
s1 = s1.difference(s2)
print(s1)
相同
s1.difference_update(s2)
intersection_update() 交集并赋值
union_update() 并集并赋值
symmetric_difference_update() 对称差集并赋值
'''
s1.difference_update(s2)
print(s1) # 0 1 3
'''
关键字: set
作用: 去重
符号: - & | ^
内置函数:
增加: add() update()
删除: remove() discard() pop() clear()
运算: difference() intersection() union() symmetric_difference()
'''
可变 不可变
# 可变 和 不可变
# 不可变: 对象所指向的内存中的值是不可以改变
# 不可变的类型: int str float 元组tuple frozenset()
num = 10
s1 ='abc'
print(id(s1)) #1473287240536
s1='abcd'
print(id(s1)) #1473288167240
t1 =(3,5,6)
print(id(t1)) #1473288096936
t1 =(3,5)
print(id(t1)) #1473288193608
# 可变的:对象所指向的内存中的值是可以改变
# 可变类型: 字典dict 列表list 集合set 扩展: frozenset() 不可变
list1 = [1,2,3,4,5]
print(list1,id(list1)) #[1, 2, 3, 4, 5] 1477921850056
list1.pop()
print(list1,id(list1)) #[1, 2, 3, 4] 1477921850056
dict1 ={1:'aa',2:'bb'}
print(dict1,id(dict1)) #{1: 'aa', 2: 'bb'} 1477916711888
dict1.pop(1)
print(dict1,id(dict1)) #{2: 'bb'} 1477916711888
'''
集合 是可变的还是不可变的?
'''
set1 = {3,5,6,8}
print(set1,id(set1)) #{8, 3, 5, 6} 2036384350504
set1.discard(5)
print(set1,id(set1)) #{8, 3, 6} 2036384350504
fset = frozenset(set1) # {3,6,8}
print(fset,id(fset)) #frozenset({8, 3, 6}) 2036384979656
fset = frozenset({3,6})
print(fset,id(fset)) #frozenset({3, 6}) 2036384980328
类型转换总结
# 类型转换
# str() int() list() dict() set() tuple()
# str ---》 int,list,set,tuple
s='8'
i = int(s)
s='abc'
l = list(s)
print(l) # ['a','b','c']
s= set(s)
print(s) #{'a', 'b', 'c'}
t = tuple(s)
print(t) #('a', 'b', 'c')
# 反过来: str 《--- int,list,set,tuple,dict,float
i= 8
s = str(i)
l = str(['a','b','c'])
print(l,type(l)) # ['a', 'b', 'c'] <class 'str'>
# list ---> set() ,tuple() ,可以转成字典 [(key,value),(key,value),(...)]
# tuple ---> list, set ---->list dict---->list
tuple1 = (1,2,3,4)
print(list(tuple1)) #[1, 2, 3, 4]
set1 = {1,2,3,4,5}
print(list(set1)) #[1, 2, 3, 4, 5]
for i in set1:
print(i) #1 2 3 4 5
dict1 = {1:'a',2:'b'}
print(list(dict1)) # [1, 2] #只是将key保存在list中
项目和函数
项目:
代码----》组织结构:项目 包含很多代码
项目:
|--包 p1
|-- test1.py
|-- test2.py
|-- test3.py
|--包 p2
|-- test1.py
|-- test2.py
|-- test3.py
函数:
if 条件1: 添加
判断名字是否存在
不存在 添加
存在 提示已存在
elif 条件2: 修改
判断名字是否存在
不存在 提示不存在
存在 允许修改电话号码
elif 条件3: 删除
判断名字是否存在
不存在 提示不存在
存在 删除用户
作用:
python 就出现了函数。
将重复的代码,封装到函数,只要使用直接找函数。
函数可以增强代码的模块化和提高代码的重复利用率。
定义函数:
格式:
def 函数名([参数,参数...]):
函数体 (重复的代码)
注意:1. 必须使用关键字def 2. 函数体注意缩进 3.函数名() 绑定
- 函数名命名规则同变量名,要满足标识符命名规则
- 不能和系统函数重名,否则系统函数无法使用
- 函数定义分两部分函数头和函数体
- 函数体,就是实现功能的代码段,以:开头,必须缩进
- 函数名的命名风格:一般建议用下划线分隔的小写单词组成:say_hello
函数学习
# 定义函数: 随机数的产生
# 自动格式化: shift+ctrl+f (format)
import random
def generate_random():
for i in range(10):
ran = random.randint(1, 20)
print(ran)
print(generate_random) # 打印函数名
# <function generate_random at 0x0000000002071E18>
# 调用: 函数名() 找到函数并执行函数体的内容
print('------------1--')
generate_random()
print('------------2--')
generate_random()
# 函数:带参数的
'''
定义:
def 函数名(参数,参数,..):
函数体
调用:
pass
'''
# 求随机数的函数,产生的个数????
# alt+enter 快速提醒/提示
import random
def generate_random(number): # 形参:形式上参数 number=5
for i in range(number):
ran = random.randint(1, 20)
print(ran)
# print(generate_random)
# 调用
generate_random(5) # 实参:实际的参数 具体的值
generate_random(8)
# 求加法的函数
def add(a, b): # 参数2个 形参
result = a + b
print("和:", result)
# 调用
add(2, 3) # 实参 2个
add(1, 1)
'''
定义一个登陆函数,参数是:username,password
函数体:
判断参数传过来的username,password是否正确,如果正确则登陆成功,否则打印登陆失败
'''
# 函数的定义
def login(username, password):
# 相当于数据库注册的用户名和密码
uname = 'admin123'
pwd = '112233'
for i in range(3):
if username == uname and password == pwd:
print('登陆成功!')
break
else:
print('登陆失败!')
username = input('输入用户名:')
password = input('输入密码:')
else:
print('账户锁定!')
# 调用:
username = input('输入用户名:')
password = input('输入密码:')
login(username, password)
isinstance(变量,类型关键字)
# 找出列表的最大值
# 自己封装一个求最大值函数
def max(iterable):
max = iterable[0]
for i in iterable:
if i > max:
max = i
print('最大值是:', max)
# 调用: 测试是否能找出最大值
list1 = [4, 1, 4, 3, 8, 9]
max(list1) #9
tuple1 = (3, 6, 1, 0, 5)
max(tuple1) #6
# sort reverse max min
print(type(tuple1)) # <class 'tuple'> 查看是什么类型
# 判断是不是什么类型: isinstance(变量,类型关键字)
print(isinstance(2, int)) # 返回值是False,True #True
print(isinstance(tuple1, tuple)) #True
if isinstance(tuple1, tuple): #True
print('不能排序和翻转')