day08回顾:
元组 tuple
不可变的列表,是可以存储任意类型数据的容器
元组 tuple
不可变的列表,是可以存储任意类型数据的容器
()
(20,)
a = 20,
t = 100, 200
t = (1,2,3)
(20,)
a = 20,
t = 100, 200
t = (1,2,3)
元组的构造函数
tuple()
tuple(可迭代对象)
元组:
+ += * *=
< <= > >= == !=
in / not in
索引和切片
tuple()
tuple(可迭代对象)
元组:
+ += * *=
< <= > >= == !=
in / not in
索引和切片
用于序列的函数:
len, max, min, sum, any, all, reversed, sorted
list, tuple, str
len, max, min, sum, any, all, reversed, sorted
list, tuple, str
字典 dict
{}
{1: "Monday", 2: "Tuesday", 3: "星期三"}
{}
{1: "Monday", 2: "Tuesday", 3: "星期三"}
构造函数dict
dict()
dict(可迭代对象) # dict(((1,2), (3,4)))
dict(命名关键字传参)
dict()
dict(可迭代对象) # dict(((1,2), (3,4)))
dict(命名关键字传参)
键索引
d['age']
d[1]
d[2] = 0
del d[2]
d['age']
d[1]
d[2] = 0
del d[2]
day09笔记
字典的成员资格判断 in / not in 运算符
用 in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
not in 返回值与 in 相反
字典的成员资格判断 in / not in 运算符
用 in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
not in 返回值与 in 相反
示例:
d = {1: "一", 2: "二"}
1 in d # True
2 in d # True
2 not in d # False
8 not in d # True
8 in d # False
'一' in d # False
d = {1: "一", 2: "二"}
1 in d # True
2 in d # True
2 not in d # False
8 not in d # True
8 in d # False
'一' in d # False
列表的 in 运算符和字典的 in 运算符比较:
1. 列表的in运算符计算时间会因列表中元素个数的增加而增加
L = [3,7,0,1,4,5,6....... 10976] # 大约有十万个
if 888 in L:
print("888在列表里") # 慢
2. 字典的in运算符计算时间不会因键值对的个数增加而增加,操作速度快于列表
d = {3: "三", 7: "xx", 0: None, ... 10976:None}
if 888 in d:
print("888在字典的键里") # 快
1. 列表的in运算符计算时间会因列表中元素个数的增加而增加
L = [3,7,0,1,4,5,6....... 10976] # 大约有十万个
if 888 in L:
print("888在列表里") # 慢
2. 字典的in运算符计算时间不会因键值对的个数增加而增加,操作速度快于列表
d = {3: "三", 7: "xx", 0: None, ... 10976:None}
if 888 in d:
print("888在字典的键里") # 快
字典的迭代访问:
容器是可迭代对象,字典只能对键进行迭代访问
d = {'name': '小张', 'birthday': (2008,8,8)}
for k in d:
print(k)
容器是可迭代对象,字典只能对键进行迭代访问
d = {'name': '小张', 'birthday': (2008,8,8)}
for k in d:
print(k)
可以用于字典的内建(built-in)函数:
len(x) 返回字典的键值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的所有键的和
any(x) 对所有键进行真值测试,有一个为True结果为True
all(x) 对所有键进行真值测试,所有为True才为True
len(x) 返回字典的键值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的所有键的和
any(x) 对所有键进行真值测试,有一个为True结果为True
all(x) 对所有键进行真值测试,所有为True才为True
字典的方法:
见:
>>> help(dict)
或
file: python_base_docs_html/dict_xxxx.html
见:
>>> help(dict)
或
file: python_base_docs_html/dict_xxxx.html
练习:
输入一个字符串代表星期几(0~6), "0"/'日'代表周日,'1'/'一' 代表周一.
'2'/'二' 代表周二.......... '6'/'六' 代表 周六
任意输入字符串,打印这个字符串是否代表星期几,如果不是以上字符打印"字典内没有相应的数据"
(要求将以上数据存于字典中, 键为字符串:'0123456日一二三...六'中的一个,值为星期几或周几)
d = {
'0': "星期天",
'日': "星期天",
'1': "星期一",
.....
}
输入一个字符串代表星期几(0~6), "0"/'日'代表周日,'1'/'一' 代表周一.
'2'/'二' 代表周二.......... '6'/'六' 代表 周六
任意输入字符串,打印这个字符串是否代表星期几,如果不是以上字符打印"字典内没有相应的数据"
(要求将以上数据存于字典中, 键为字符串:'0123456日一二三...六'中的一个,值为星期几或周几)
d = {
'0': "星期天",
'日': "星期天",
'1': "星期一",
.....
}
字典推导式:
作用:
用可迭代对象生成字典
语法:
{键表达式 : 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []的内容代表可省略
作用:
用可迭代对象生成字典
语法:
{键表达式 : 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []的内容代表可省略
示例:
# 生成一个字典,键为10以内的数字,值为键的平方
d = {x : x ** 2 for x in range(10)}
# 生成一个字典,键为10以内的数字,值为键的平方
d = {x : x ** 2 for x in range(10)}
练习:
1. 有字符串列表如下:
L = ["tarena", 'xiaozhang', 'hello']
用推导式生成如下字典:
d = {"tarena":6, 'xiaozhang':9, 'hello':5}
注: 字典的值为键的长度
1. 有字符串列表如下:
L = ["tarena", 'xiaozhang', 'hello']
用推导式生成如下字典:
d = {"tarena":6, 'xiaozhang':9, 'hello':5}
注: 字典的值为键的长度
2. 有两个列表:
no = [1001, 1002, 1003, 1004]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
用no中的编码为作为键,以names中的字符串作为值,生成相应的字典
提示 : range(4)来生成索引
no = [1001, 1002, 1003, 1004]
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
用no中的编码为作为键,以names中的字符串作为值,生成相应的字典
提示 : range(4)来生成索引
字典推导式的嵌套:
语法同列表推导式嵌套
语法同列表推导式嵌套
字典 VS 列表
1. 都是可变对象
2. 索引方式不同, 列表用整数索引,字典用键索引
3. 字典的查找速度可能会快于列表(重要)
4. 列表的存储是有序的,字典的存储是无序的
1. 都是可变对象
2. 索引方式不同, 列表用整数索引,字典用键索引
3. 字典的查找速度可能会快于列表(重要)
4. 列表的存储是有序的,字典的存储是无序的
集合 set
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后顺序关系
集合内的元素必须是不可变对象
集合是可迭代对象
集合是相当于只有键没有值的字典(键则是集合的数据)
创建空的集合:
set()
创建非空的集合:
s = {1, 2, 3, 4}
set()
创建非空的集合:
s = {1, 2, 3, 4}
集合的构造函数 set
set() 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) 用可迭代对象创建一个新的集合对象
set() 创建一个空的集合对象(不能用{}来创建空集合)
set(iterable) 用可迭代对象创建一个新的集合对象
示例:
s = set() # s 为空集合
s = {3,5,7,9}
s = set("ABC") # s = {'A', 'B', 'C'}
s = set({1:'1', 2:"2", 5:'5'}) # s = {1,2,5}
s = set(range(1:10:3)) # s = {1,4,7}
s = set() # s 为空集合
s = {3,5,7,9}
s = set("ABC") # s = {'A', 'B', 'C'}
s = set({1:'1', 2:"2", 5:'5'}) # s = {1,2,5}
s = set(range(1:10:3)) # s = {1,4,7}
集合的运算:
交集, 并集,补集,子集,超集
运算符:
& | - ^ < <= > >= == !=
in / not in
交集, 并集,补集,子集,超集
运算符:
& | - ^ < <= > >= == !=
in / not in
& 生成两个集合的交集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 & s2 # {2, 3}
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 & s2 # {2, 3}
| 生成两个集合的并集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 | s2 # {1, 2, 3, 4}
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 | s2 # {1, 2, 3, 4}
- 生成两个集合的补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2 # {1} #生成属性s1但不属于s2的所有元素的集合
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2 # {1} #生成属性s1但不属于s2的所有元素的集合
^ 生成两个集合的对称补集
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 ^ s2 # {1, 4}
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 ^ s2 # {1, 4}
> 判断一个集合是另一个集合的超集
< 判断一个集合是别一个集合的子集
{1, 2, 3} > {1, 2} # True
{2, 3, 1} > {3, 2} # True
{2, 3, 4} < {1, 2, 3, 4} # True
< 判断一个集合是别一个集合的子集
{1, 2, 3} > {1, 2} # True
{2, 3, 1} > {3, 2} # True
{2, 3, 4} < {1, 2, 3, 4} # True
== / != 集合相同和不同
{1, 2, 3} == {3, 2, 1} # True
{1, 2, 3} != {2, 3, 4} # True
{1, 2, 3} == {3, 2, 1} # True
{1, 2, 3} != {2, 3, 4} # True
in / not in 运算符
in 等同于字典的in, 用于集合中,当某个值存在于集合中,返回True,否则返回False
not in 与 in 返回值相反
in 等同于字典的in, 用于集合中,当某个值存在于集合中,返回True,否则返回False
not in 与 in 返回值相反
集合的 in / not in 运算符的速度快于序列
能用于集合的函数:
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
集合是可迭代对象
集合练习:
经理有: 曹操,刘备,周瑜
技术员有: 曹操,周瑜,张飞,赵云
用集合求:
1. 即是经理也是技术员的有谁?
2. 是经理,但不是技术员的有谁?
3. 是技术人员,但不是经理的都有谁?
4. 张飞是经理吗?
5. 身兼一职的人都有谁?
6. 经理和技术员共有几个人?
python3 集合中的常用方法:
见:
>>> help(set)
或:
python_base_docs_html/set_????.html
见:
>>> help(set)
或:
python_base_docs_html/set_????.html
集合推导式
集合推导式是用可迭代对象生成集合的表达式
集合推导式是用可迭代对象生成集合的表达式
语法:
{ 表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: [] 内的内容可省略
{ 表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: [] 内的内容可省略
示例:
numbers = (1,2,3,2,2,3,3,4,5)
s = {x for x in numbers} # 去除重复的元素
numbers = (1,2,3,2,2,3,3,4,5)
s = {x for x in numbers} # 去除重复的元素
固定集合 frozenset
固定集合是不可变的,无序的,含有不重复元素的集合
作用:
固定集合可以作为字典的键,还可以作为集合的值
固定集合可以作为字典的键,还可以作为集合的值
创建空的固定集合
fs = frozenset()
fs = frozenset()
创建非空的固定集合:
frozenset(iterable) 用可迭代对象创建新的固定集合
示例:
fz = frozenset([2,3,5,7]) # frozenset({2, 3, 5, 7})
frozenset(iterable) 用可迭代对象创建新的固定集合
示例:
fz = frozenset([2,3,5,7]) # frozenset({2, 3, 5, 7})
运算:
& 交集
| 并集
- 补集
^ 对称补集
in /not in 运算
< <= > >= == !=
(以上运算 与 set 的运算完全相同)
& 交集
| 并集
- 补集
^ 对称补集
in /not in 运算
< <= > >= == !=
(以上运算 与 set 的运算完全相同)
固定集合的方法:
相当于集合的全部方法(去掉修改集合的方法)
相当于集合的全部方法(去掉修改集合的方法)
列表 ,字典,集合对象优缺点:
1. 都为可变
2. 列表的尾部插入速度比较快,查中间插入和头插数据速度慢
3. 列表有序
4. 字典添加,删除,修改速度快于列表
5. 集合的添加,删除快于列表,且不能存储重复元素
练习:
1. 输入一段字符串,打印所有输入过的字符串,但重复的只打印一次,(不要求打印的顺序与输入顺序一致)
输入: abcdabcaba
打印:
a b c d
1. 输入一段字符串,打印所有输入过的字符串,但重复的只打印一次,(不要求打印的顺序与输入顺序一致)
输入: abcdabcaba
打印:
a b c d
2. 输入一段字符串,打印出这个字符串中出现过的字符及出现过的次数:
如:
输入:abcdabcaba
打印如下:
a: 4次
b: 3次
d: 1次
c: 2次
注: 不要求打印顺序
如:
输入:abcdabcaba
打印如下:
a: 4次
b: 3次
d: 1次
c: 2次
注: 不要求打印顺序
练习:
1. 有一只小猴子,摘了很多桃.
第一天吃了全部桃子的一半,感觉不饱又吃了一个
第二天吃了剩下桃子的一半,感觉不饱又吃了一个
.... 以此类推
到第十天,发现只剩下一个了
请问第一天摘了多少个桃?
2. 完全数
1 + 2 + 3 = 6 (6为完全数)
1, 2, 3都为6的因数(能被一个数x整除的数为y,则y为x的因数)
1 x 6 = 6
2 x 3 = 6
完全数是指除自身以外的所有的因数之和相加等于自身的数
求 4 ~ 5个完全数,并打印出来
答案:
6
28
496
8128
3. 任意输入一个数n代表三角形的高度, 打印此形将的三角形
如:
请输入:4
打印如下:
1
121
12321
1234321
4. 将第三题打印三角形变为打印棱形
1
121
12321
1234321
12321
121
1