推导式是python中很强大的 很受受欢迎的,具有语言简洁,速度快等优点。推导式包括:
1.列表推导式
2.字典推到书
3.集合推导式
#1到10的平方的列表
列表推导式
列1:整除3的数字列表
列表推导式numbers = []
for x in range(100):
if x % 3 == 0:
numbers.append(x*x)
print(numbers)
# nums=(推导) 生成器 此时并没有执行 创建了一个生成器
def squared(x):
return x*x
num=[squared(x) for x in range(100) if x%3==0]
num1=[squared(x) for x in range(100) if x%3==0]
print(type(nums)) #yied
print(nums)
print(nums1)
print([y for y in nums])
字典推导式
字典推导和列表推导的使用方法是类似的,只不过中括号该改成大括号。直接举例说明:
快速更换key 和 velue
mcase = {'a':10,'b':34}
new_m={v:k for k,v in mcase.items()}
new_m={}
for k,v in mcase.items():
new_m[v]=k
new_m= {v:k for k,v in mcase.items()}
print(new_m)
集合推导式
它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。
set1= {x**2 for x in (1,2,3,4)}
print(set1)
例子:快速更换key和value
mcase = {'a': 10, 'b': 34}
mcase_frequency = {v: k for k, v in mcase.items()}
print mcase_frequency
# Output: {10: 'a', 34: 'b'}
练习1:
用集合推导 字符串长度的集合
strings = ['a','is','with','if','file','exception']
lens = [s.upper() for s in strings if len(s)>3]
print(lens)
练习2:
0到9 的次方
print([x**2 for x in range(10)])
练习3:
求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表:
L=[]
for x in range(6):
if x%2==0:
for y in range(6):
if y%2==1:
L.append((x,y))
print(L)
LL=[(x,y) for x in range(6) if x%2==0 for y in range(6) if y%2==1]
print(LL)
练习4:
求m中3,6,9组成的列表:
m = [[1,2,3],[4,5,6],[7,8,9]]
print([x[0] for x in m])练习5:
求m 中斜线1,5,9组成的列表:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[m[i][i] for i in range(len(m))]
练习6:
求m,n中矩阵各个元素的乘积:
m= [[1,2,3],[4,5,6,],[7,8,9]]
n= [[2,2,2],[3,3,3],[4,4,4]]
# 通过元素下标 获取各个数据
for i in range(len(m)):
for j in range(len(m[i])):
print(m[i][j]*n[i][j],end=' ')
s=[m[i][j]*n[i][j] for i in range(len(m)) for j in range(len(m[i]))]
print(s)
s=[ [m[row][col]*n[row][col] for col in range(len(m[row]))] for row in range(len(m))]
s1=[ [m[i][j]*n[i][j] for j in range(len(m[i]))] for i in range(len(m))]
s2=[ [m[i][j]*n[i][j] for i in range(len(m[j]))] for j in range(len(m))]
print(s)
print(s1)
print(s2)
练习7:
结合两个列表的元素,如果元素之间不相等的话:
a=[1,2,3]
b=[3,1,4]
c=[2,5,4]
for i in a:
for j in b:
for j in b:
for k in c:
if i!=j and j!=k and i!=k:
print((i,j,k),end=' ')
print()
print( [(i,j,k) for i in a for j in b for k in c if i!=j and j!=k and i!=k ])
练习7:
create a list of 2-tuples like (number, square)
print([ (x,x**2) for x in range(6)])
将csv文件读取为字典列表:
import csv
Dict=csv.DictReader(open('随手.csv','rU'))
# print(type(Dict))
# print(dir(Dict))
# print(Dict)
ds=[]
# for d in Dict:
# for c in d.values():
# print(c)
# ds.append(d)
#ds.append(d)
print(ds)
print([d.values()] for d in Dict )