1、字典
dic1 = {'a': 1, 'b': 2} # dict = {key: value}
# dic2 = {'a': 1, 'a': 2} # key值相同,去第二个值,去最后一个值
dic3 = {1: 'abc', 2: 2}
print(dic1['a']) # 1
print(dic3[2]) # 2
2、使用fromkeys() 创建字典
lis = ['a', 'b', 'c']
dic = dict.fromkeys(lis, 1) # lis的元素作为键, 值都为1
print(dic)
3、字典的删除、清空操作, del语句、 clear()
person = {'age': 19, 'name': 'cc'}
del person['age'] # 删除键值对
person.clear() # 清空字典
print(person)
4、遍历字典、查元素
person = {'age': 19, 'name': 'cc', 'desc': '666'}
keys = person.keys() # 获取所有的键
values = person.values() # 获取所有的值
print(person['age']) # 获取键对应的值
print(person.get('age')) # 获取键对应的值
print(person.get('abc', '不存在')) # 没有则输出‘不存在’
for key, value in person.items(): # 遍历字典
print(key, value)
print(keys, values, type(values))
5、range()函数,用的较多
# range(start, end, step)
r = range(10) # 第一种形式
r1 = range(1, 11) # 第二种形式
r2 = range(0, 20, 2) # 第三种形式
# 阶乘案例
def factorial(n):
if n == 1:
return 1
res = 1 # 存结果
for i in range(1, n + 1):
res *= i
return res
print(factorial(5)) # 120
6、复数
# j/J,大小写都可以
complex1 = 3 + 4j # 输出会加括号
print(complex1, type(complex1))
print('实部:', complex1.real, type(complex1.real)) # 浮点数
print('虚部:', complex1.imag) # 浮点数
7、转换为负数, comlpex()
c = complex('11')
b = complex(22)
d = complex()
e = complex('2+3j') # 运算符号两边不能加任何空格
print(c, b, d, e) # (11+0j) (22+0j) 0j (2+3j)
8、文本序列转换字节序列
# 二进制序列 b、bytes(str, encoding=)、encode()、decode(), 得到的都是二进制,十六进制方便展示
# 通过b前缀将文本序列转换为字节序列
demo = b'https://blog.csdn.net/chenchun0458'
print(demo, type(demo)) # b'https://blog.csdn.net/chenchun0458' <class 'bytes'>
# 通过bytes() 转换
demo1 = 'python开发'
demo1_byte = bytes(demo1, encoding='utf-8')
print(demo1_byte, type(demo1_byte)) # b'python\xe5\xbc\x80\xe5\x8f\x91' <class 'bytes'>
# 通过encode()编码, decode()解码
demo2 = '阿纯'
demo3 = demo2.encode('utf-8')
print(demo3, type(demo3)) # b'\xe9\x98\xbf\xe7\xba\xaf' <class 'bytes'> 原来的demo并不会变
demo4 = demo3.decode('utf-8')
print(demo4)
9、 enumerate(),把一个序列类型(列表、元组、字符串)的数据构造成key:value结构
lis = ['a', 'b', 'c']
for key, value in enumerate(lis):
print((key, value))
'''
结果是:
(0, 'a')
(1, 'b')
(2, 'c')
'''
10、列表推导式
# 列表推导式, 生成1~9的列表
lis = [i for i in range(1, 10)]
print(lis)
# 列表推导式 + if条件语句, 0~10之间的偶数
lis1 = [i for i in range(10) if i % 2 == 0]
print(lis1)
# for循环嵌套列表推导式
lis2 = [(i, j) for i in range(1, 3) for j in range(3, 5)] # 等价双重for循环
print(lis2) # [(1, 3), (1, 4), (2, 3), (2, 4)]
# 上面列表推导式等价下面代码
lis3 = []
for i in range(1, 3):
for j in range(3, 5):
lis3.append((i, j))
print(lis3)
11、集合推导式
# 集合推导式,与列表类似
set1 = {i * 2 for i in range(10)}
print(set1)
12、字典推导式
dic = {str(i): i * 2 for i in range(10)} # 表达式结构就是字典元素的形式
print(dic)
# 合并两个列表为字典
lis1 = ['name', 'age']
lis2 = ['cc', '19']
dic1 = {lis1[i]: lis2[i] for i in range(len(lis2))} # 取lis1的元素当键,取lis2的元素当值
print(dic1)
# 需求:提取上述电脑数量大于等于200的字典数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'ACER': 99}
lis = {key: value for key, value in counts.items() if value >= 200}
print(lis)
13、eval()函数
# eval()函数, 会保留输入值的原始类型,数字、列表、字典等等
input1 = eval(input("请输入内容:")) # 列表、字典等等都可以输入
print(input1, type(input1))
14、assert语句
number = eval(input("请输入现在是几点:"))
assert 0 <= number <= 24 # 相当于if, 值不合理会报错
print(f"现在是{number}点")
15、三目运算符
# 三目运算符, 相当于if-else, 语句段1 if 条件判断 else 语句段2
a = 2
str1 = '大于1' if a > 1 else '小于1'
print(str1)
16、while/for-else结构, else正常执行, 注意:循环加了break后或异常退出else将不再执行
str1 = 'https://blog.csdn.net/chenchun0458'
i = 0
while i < len(str1):
print(str1[i], end=' ')
i += 1
else: # 程序没有异常,没有break语句,else照常执行
print("\n输出完毕")
17、组包和拆包
1、将数据结构(列表、字典、元组、集合、字符串)合并在一起(或者初始化一个列表、元组等等)就叫组包 2、将数据结构(列表、字典、元组、集合、字符串)拆开就叫拆包
tup = (1, 2, 3) # 组包
lis = [1, 2, 3]
set1 = {1, 2, 3}
dic = {'a': 1, 'b': 2}
a, b, c = tup
print(a, b, c)
# 使用* 对列表、元组、集合拆包
print(*tup, *lis, *set1) # 1 2 3 1 2 3 1 2 3
# 使用**对字典解包
# 解包之后的为a=1, b=2, 不能直接打印
# 使用函数接收字典拆包后的值,函数接收的参数必须与键保持一致
def func(a, b):
print(a, b)
func(**dic)