字典推导式 dict comprehesion
作用:
用可迭代对象生成字典
语法:
{ 键表达式: 值表达式 for 变量 in 可迭代对象 [if真值表达式]}
说明:
先用可迭代对象生成一个对象,同时用变量绑定这个对象
调用表达式,生成相应的键和对应的值存入于字典中
重复上述步骤,直到可迭代对象不再提供数据为止
if部分可以省略,同列表推导式规则相同
示例:
# 生成一个字典,键为数字,值为键的平方
d = { x : x**2 for x in range(1, 11)}
字典推导式是可以嵌套的
示例:
用字符串"ABC",和数字123生成如下字典
{
"A1":("A", 1),"A2": ("A", 2), "A3": ("A", 3),
"B1":("B", 1),"B2": ("B", 2), "B3": ("B", 3),
"C1":("C", 1),"C2": ("C", 2), "C3": ("C", 3)
}
{
x+str(y): (x, y)
for x in "ABC"
for y in range(1, 4)
}
以上代码等同于如下代码
d= {}
forx in "ABC":
for y in range(1, 4):
d[x+str(y)] = (x, y)
能用于字典的方法:
len() 返回字典长度
max(x) 返回字典中键值最大的键
min(x) 返回字典中键值最小的键
sum(x) 返回字典中所有键的和
any(x) 对键进行真值测试,规则与对序列测试相同
all(x) 对键进行真值测试
集合 set
集合是可变的容器
集合内的数据对象都是唯一的(不能重复多次的)
集合是无序的存储结构,集合中的数据没有先后关系.
集合内的元素必须是不可变对象
集合是可迭代的.
集合是相当于只有键,没有值的字典(键则是集合的数据)
集合的构造(创建)函数
set() 创建一个空的集合对象
set(iterable) 用可迭代对象创建一个新的集合对象
集合的表示方法:
set() 表示空集合
{元素1, 元素2,...} 表求非空集合
示例:
s = set()
s = set("ABC") # {'C', 'A', 'B'}
s = set("ABCCBA") # {'C', 'A', 'B'}
s = {2, 3, 5}
s = set([1, 0, 3.14, 1+2J])
s = set( (True, None, 100, 3.14) )
s = set( {2:"第一个质数",3:"...", 5:"第3个"})
s = {1, 2, [3.1, 3.2]} # 错的,列表不能作为集合的值
集合的运算:
交集, 并集, 补集, 子集, 超集
描述方法:
s1 = {1,2,3}
s2 = {2,3,4}
& 生成两个集合的交集
s3 = s1 & s2 # {2, 3} 共有部分
| 生成两个集合的并集
s4 = s1 | s2 # {1,2,3,4} 并集
- 生成两个集合的补集
# 生成属于s1,但不属性s2的所有元组的集合
s5 = s1 - s2 # s5 = {1}
s6 = s2 - s1 # s6 = {4}
^ 生成两个集合的对称补集
s7 = s1 ^ s2 # {1, 4}
> 判断一个集合是另一个集合的超集
< 判断一个集合是另一个集合的子集
s0 = {2, 3}
s1 = {1, 2, 3}
s1 > s0 # True # 反之为False
s0 < s1 # True
== != 判断相同/不同
{1, 2, 3} == {3, 2, 1} # True
{1, 2, 3} != {3, 2, 1} # False
s1 != s2 # True
另:
>= 超集或相同
<= 子集或相同
in / not in 运算符
等同于字典, in 用于集合中,判断一个值是否存于集合中.
not in 与 in的返回值相反
字典和集合的优点:
in/not in 运算符的查找速度快
用于集合的函数:
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
集合中常用的方法:
S代表集合
S.add(e) 在集合中添加一个新的元素e,如果元素存在,则不添加
S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError的错误
S.discard(e)从集合中移除一个元素(不会产生错误)
S.clear() 清空集合中所有元素
S.copy() 将集合进行一次浅拷贝
S.pop()从集合s中删除一个随机元素,如果集合为空,则引发KeyError错误
S.update(s2) 用S与s2更新集合S
集合是可迭代对象:
例:
s= {"abc", 123, (1970, 1, 1)}
forx in s:
print(x)
集合推导式:
作用:
生成集合
语法:
{ 表达式 for 变量 in 可迭代对象[if 真值表达式] }
列表推导式 []
示例:
# 生成1~10的平方的集合
{x ** 2 for x in range(1, 11)}
固定集合 frozenset
作用:
创建一个不可变的,无序的,含有唯一元素的集合
固定集合是集合set的不可变版本
固定集合的构造(创建)函数
frozenset() 创建空的固定集合
frozenset(iterable) 用可迭代对象创建一个固定集合
例:
f = frozenset()
f = frozenset([1,3,5,7,9])
运算:
& 交集
| 并集
- 补集
^ 对称补集
in /not in 运算符
< <= > >= == !=
(以上运算符操作等同于set中的用法)
固定集合的方法:
相当于集合的全部方法(去掉修改集合的方法)
用途:
固定集合可以作为字典的键
还可以作为集合的值
总结:
数据类型:
不可变的:
str, tuple, frozenset, int,float, complex, bool, bytes(字节串)
可变的:
list, dict, set, bytearray(字节数组)
运算符:
+ - * / % // **
< <= > >= == !=
is / is not
in / not in
and, or, not
+(正号) -(负号)
& | ^ << >> ~
表达式:
1
max(1,2,3,4)
1 + 2
max(1,2,3,4) + 100
[x for x in range(100)]
条件表达式 x if x >y else y
语句:
表达式语句
print("hello world")
"abcd"
赋值语句:
a = 1
a = b = c = 100
x, y = 100, 200
if 语句
while 语句
for 语句
break 语句
continue 语句
del 语句
pass 语句