列表推导式
为什么要有列表推导式:
我们创建一个L = [1,2,3,4]很容易:我们创建一个包含1-100的列表:L = List(range(100)) 这也很容易,但是如果我们想要创建一个不是这种连续的数据集合的列表,例如生成一个1-100的x*x的数据集合的列表怎么办,我们需要使用for循环,如下:
for x in range(1, 11):
L.append(x * x)
那么我们有没有一种更简洁的方式来实现呢?这就需要使用列表推导式了
列表推导式定义:用可迭代对象依次生成带有多个元素的列表的表达式
非嵌套列表推导式:
作用:
用简单方法生成列表
语法:
3 2 1
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 真值表达式]
示例:
一下生成一个值为1~9的平方的列表
L = [x*x for x in range(1,10)] # [1,4,9,16,25,36,49,64,81]
那么生成一个1-100的x*x的数据集合的列表就可以这样写:
L = [x * x for x in range(1, 11)]
列表推导式的嵌套:
语法:
[ 表达式1
for 变量1 in 可迭代对象1 if 真值表达式1
for变量2 in 可迭代对象2 if 真值表达式2
......]
注:一般来说三层和三层以上的嵌套就很少使用了。
示例:
#将L1中的全部元素与L2中的全部元素依次相乘后放到列表L3中
L1 = [1,2,3,4,5]
L2 = [2,4,6]
L3 = [x*y for x in L1 for y in L2]
print(L3)
输出结果:
[2, 4, 6, 4, 8, 12, 6, 12, 18, 8, 16, 24, 10, 20, 30]
在for循环是可以同时使用两个甚至对个变量的
dict = {'1':'a', '2':'b', '3':'c'}
L1 = [key + ' is ' + value for key, value in dict.items() if True ]
print(L1)
字典
作用: 用可迭代对象依次生成字典内元素的表达式
语法:
{键表达式:值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []的内容代表可省略
d = {x : x **2 for x in range(7)}
d----->{0:0,1:1,2:4,:3:9,4:16,5:25,6:36,7:49}
d = {x : x **2 for x in range(7) if x % 3 ==0}
d ----> {0:0,9:81,3:9,6:36}
集合
用可迭代对象生成集合的表达式
语法:
{表达式 for 变量 in 可迭代对象 [if 真值表达式]}
[]括号部分内容代表可省略
示例:
L = [2,3,5,7,3,5,7,11]
s = { x ** 2 for x in L} # s={4,9,25,49,121}
集合推导式的嵌套于列表推导式大致相同
{x + y for x in "ABC" for y in "123"}
注:其实列表推导式,字典推导式和集合推导式原理是一样的,并且都是有推导式的嵌套的,只要明白了一个其他的就都会明白了。