解析式
列表解析式的一般形式:
variable = [expression for value in iterable if condition]
变量 表达式 收集器 条件
或者这样的:
l = [i ** 2 for i in range(1, 21) if i % 2 == 0]
print(l) # [4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
也可以这样,创建一个嵌套列表:
l = [[col for col in range(3)] for rows in range(5)]
print(l) # [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
上例中,大的列表共有rows个子元素,每个子元素(嵌套内的列表)是col。
或者 这样的:
l = [x + y for x in 'abc' for y in 'ABC']
print(l) # ['aA', 'aB', 'aC', 'bA', 'bB', 'bC', 'cA', 'cB', 'cC']
注意,不用一味的渴求简便,要注意可读性。
集合推导式
同样的,集合也有其推导式,用法与列表类似,只要将中括号换为大花括号即可。
variable = {expression for value in iterable if condition}
变量 表达式 收集器 条件
来个示例:
s = {i for i in range(10)}
print(s) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 = {i for i in range(10) if i % 2 == 0}
print(s1) # {0, 8, 2, 4, 6}
s2 = {i ** 2 for i in range(10) if i % 2 == 0}
print(s2) # {0, 8, 2, 4, 6}
s3 = {x + y for x in 'abc' for y in 'ABC'}
print(s3) # {'aB', 'bA', 'aA', 'cC', 'bB', 'cA', 'cB', 'bC', 'aC'}
那么同为花括号的字典呢,也有自己的推导式。
字典推导式
d = {k: '我是value啦' for k in range(5)}
print(d) # {0: '我是value啦', 1: '我是value啦', 2: '我是value啦', 3: '我是value啦', 4: '我是value啦'}
三元表达式
接下来再说一个知识点——三元表达式,其语法是:
result = True if condition else False
if后跟条件,条件为真返回if左侧的结果,当条件为假则返回else的结果,其等价于下面的示例:
x = 1
y = 2
if x < y:
print(x)
else:
print(y)
res = x if x < y else y
有些情况下的代码结构相当的简单,所以Python为我们提供一种将这种简单结构的代码镶嵌在较大的表达式内的格式。
深浅拷贝:
l2=[‘1’,’3’,’4’,’5’]
l1=l2 注释:l2的值改变,l1的值随之改变
l1=l2.copy() 注释:l2的值改变,l1的值不改变
x=[‘3’,’5’]
l3=[‘1’,‘2’,‘3’,x]
l1=l3.copy() 注释:x的值改变,l3和l1的值都改变。但是l3的值改变,l1的值不改变
l1=l3.deepcopy() 注释:l3中的x值改变,不影响l1中x的值,自然也不会影响的l1。完全拷贝