day07回顾
-
元组 tuple
可以是任意类型的数据(类似于列表)
元组是不可变的序列(类似于字符串)
() (20,) (10, 20)
20, 10, 20
构造函数tuple() / tuple(可迭代对象) -
字符串, 列表,元组的运算:
+ += * *=
< <= > >= == !=
in / not in
索引 index / 切片 slicereversed(可迭代对象) 反转序列
-
字典 dict
表示方式
{}, {1:‘一’}, {1:‘一’, 2:‘二’}
构造函数 dict
dict()
dict(可迭代对象)
dict([“AB”, (1,2), [3, 4]])
dict(关键字传参)
dict(name=“laowei”, age=35)键索引
字典[键表达式] # 取值
字典[键表达式] = 表达式 # 赋值
del 字典[键表达式]
D.clear() 清空
D.pop(键) 移除
D.copy()
D.update(D2) 合并
D.get(键, default=None)
D.keys() # 键 key
D.values() # 值 value
D.items() # 键值对
for k, v in D.items():
pass
- 字典推导式:
生成字典:
{键表达式: 值表达式 for 变量in 可迭代对象 if 条件表达式 …}
day08笔记:
集合 set
-
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变对象
集合是可迭代对象
集合是相当于只有键没有值的字典(键则是集合的数据) -
创建空集合:
set()
创建非空集合:
s = {1, 2, 3}
集合的构造函数 set
set() 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) 用可迭代对象创建一个新的集合对象示例:
s = set() # 空集合
s = {3, 5, 7, 9}
s = set(“ABC”) # {‘A’, ‘B’, ‘C’}
s = set(“ABCCBA”) # {‘A’, ‘B’, ‘C’}
s = set({1:‘一’, 2:‘二’, 5:‘五’})
s = set([1, 2.0, 3.14, False])
s = {True, None, “ABC”, (1,2,3)} -
集合的运算:
交集& 并集| 补集- , 对称补集^
子集< 超集> -
& 生成两个集合的交集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 & s2 # s3 = {2, 3} -
| 生成两个集合的并集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 | s2 # s3 = {1, 2, 3, 4} -
- 生成两个集合的补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 - s2 # {1}
注: 两个属于s1,但不属于s2的所有元素的集合 -
^ 生成两个集合的对称补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2 # {1, 4} -
< 判断一个集合是另一个集合的子集
-
> 判断一个集合是另一个集合的超集
s1 = {1, 2, 3}
s2 = {2, 3}
s1 > s2 # True s1为s2的超集
s2 < s1 # True s2为s1的子集 -
== / != 集合相同/不同
s1 = {1, 2, 3}
s2 = {3, 2, 1}
s1 == s2 # True
s1 != s2 # False -
>= <= 略
-
in / not in 运算符
等同于列表的in运算符,用于判断一个元素是否存在于集合中.如果存在则返回True,否则返回False
not in 与in相反if 2 in {1, 2, 3}:
print(“2在{1,2,3}内”) -
用于集合的函数:
len(x) / max(x) / min(x)
sum(x) / any(x) / all(x) -
练习:
经理有: 曹操,刘备,孙权
技术员有: 曹操,孙权,张飞,关羽
用集合求:- 即是经理也是技术员的人有谁?
- 是经理,但不是技术员的人有谁?
- 是技术员,但不是经理的人有谁?
- 张飞是经理吗?
- 身兼一职的人有谁?
- 经理和技术员共有几个人?
-
集合常用的方法:
文档参见: -
集合是可迭代对象
s = {1,2,3}
for x in s:
print(x)
L = [x**2 for x in s] -
集合推导式
集合推导式是用可迭代对象创建集合的表达式 -
语法:
{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []里的内容代表可省略 -
示例:
s = “ABC”
s2 = {x for x in s} # s={‘A’, ‘B’, ‘C’}
L = [1,2,3,4,5,3,4,5,6]
s3 = {x ** 2 for x in L} -
推导式小结:
三种:
列表推导式 [x for x in L if …]
字典推导式 {x: x**2 for x in L if …}
集合推导式 {x for x in L if …} -
固定集合 frozenset
固定集合是不可变的,无序的,含有唯一元素的集合作用:
固定集合可以作为字典的键,也可以作为集合的值 -
固定集合的构造函数:
frozenset() 创建一个空的固定集合对象
frozenset(iterable) 用可迭代对象创建一个固定集合对象 -
示例:
fs = frozenset() # 创建空固定集合
fs = frozenset(“ABCCBA”) # fs = frozenset({‘B’, ‘A’, ‘C’})
fs = frozenset(range(10))
fs = frozenset({1, 2, 3})s = {frozenset({1, 2, 3}), 100, 200}
-
固定集合的运算:
& 交集
| 并集- 补集
^ 对称补集
< <= > >= == !=
in / not in 运算
(以上运算符用法与 set 相同)
- 补集
-
固定集合的方法:
相当于集合的全部方法去掉修改集合的方法
详见:
help(frozenset) -
阶段总结:
数据类型
不可变数据类型
bool, int, float, complex, str, tuple, frozenset, bytes(字节串)
可变数据类型
list, dict, set, bytearray(字节数组)运算符:
+ - * / // % **
> >= < <= == !=
is / is not
in / not in
not and or
& ^ |
+(正号), -(负号)
[] 索引/切片表达式
1
1 + 2
max(1,2,3) + max(4,5,6)
print(“hello”)
条件表达式 x if x > y else y
全部的推导式: 列表,字典,集合推导式(三种) -
语句:
表达式语句
print(“hello”)
赋值语句:
a = 100
a = b = c = 200
x, y = 100, 200
del语句
if 语句
while语句
for语句
break语句
continue语句
pass语句 -
内建函数:
- 用于容器的函数
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x) - 构造函数
int(x)
bool(x)
float(x)
complex(x)
str(x)
list(x)
tuple(x)
dict(x)
set(x)
frozenset(x) - 数值处理函数
abs(x)
round(x)
pow(x, y, z=None) - 进制字符串
bin(x)
oct(x)
hex(x) - 编码转换
chr(x)
ord(x) - 返回可迭代对象的函数
range(start, stop, step)
reversed(x) - 输入输出函数:
input()
print(…, sep=’ ‘, end=’\n’) - 其它
id(x)
type(x)
- 用于容器的函数
函数 function
-
什么是函数
函数是可以重复执行的语句块,可以重复的调用
函数是面向过程编程的最小单位 -
作用:
- 用于封装语句块,提高代码的重用性
- 定义用户级别的函数
-
def 语句
语法:
def 函数名(形参列表):
语句块
说明:- 函数的名字就是语句块的名称
- 函数名的命名规则写变量名的规则相同(必须是标识符)
- 函数名是一个变量(不要轻易对其赋值)
- 函数有自己的名字空间,在函数外部不可能访问函数内部的变量,在函数内部可以访问函数外部的变量
要让函数处理处部的数据最好用参数给函数传入一些数据 - 函数如果不需要传入参数,参数列表可以为空
- 语句部分不能为空.如果为空需要填充pass语句
-
函数调用
函数名(实际调用传递参数)
说明:
函数调用是一个表达式.如果函数内没有return语句.默认返回None对象 -
练习:
写一个函数myadd,此函数中的参数列表里有两个参数x, y,此函数的功能是打印 x + y的和:
如:
def myadd(…):
… # …是需要填充的部分myadd(100, 200) # 打印300
myadd(“ABC”, “123”) # 打印 ABC123 -
return 语句
语法:
return [表达式]
注: [] 代表其中的内容可省略作用:
用于函数中,结束当前函数的执行,返回到调用函数的地方,同时返回一个对象的引用关系- 说明:
- return 语句后跟的表达式可以省略,省略后相当于 return None
- 如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条return None语句)
- 说明:
-
练习:
-
写一个函数 myadd2, 实现给出两个数,返回这两个数的和
如:
def myadd(x, y):
…
a = int(input("请输入第一个数: "))
b = int(input("请输入第二个数: "))
print(“您输入的这两个数的和是”, myadd2(a, b)) -
写一个函数mymax3,返回三个数中最大的一个值
def mymax3(a, b, c):
… # 此处自己实现
print(mymax3(100, 300, 200)) # 300
print(mymax3(“ABC”, “123”, “abc”)) # abc-
写一个函数 input_numbers,如下:
def input_numbers():
… # 此处自己实现
此函数用来获取用户循环输入的正整数,当用户输入负数时结束输入
将用户输入的数字以列表的形式返回,再用内建函数max,min,sum求出用户输入数的最大值,最小值及和L = input_numbers()
print(L) # 打印列表
print(“用户输入的最大数是:”, max(L))
print(“用户输入的最小数是:”, min(L))
print(“用户输入的数的和是:”, sum(L))
-
-
练习:
- 写一个函数get_chinese_char_count(s) 函数,此函数实现的功能是给定一个字符串,返回这个字符串中中文字符的个数
def get_chinese_char_count(s):
… # 此处自己实现
s = input("请输入中英文混合的字符串: ")
print(“您输入的中文字符的个数是:”,
get_chinese_char_count(s))
2. 定义两个函数:
sum3(a, b, c) 用于返回三个数的和
pow3(x) 用于返回x的三次方(立方)
用以上函数计算:
1) 计算 1的立方+ 2的立方 + 3的立方
2) 计算 1 + 2 + 3的和的立方
即:13 + 23+3**3 和 (1+2+3)**3 - 写一个函数get_chinese_char_count(s) 函数,此函数实现的功能是给定一个字符串,返回这个字符串中中文字符的个数