又是1小时系列,本例子为《python学习手册 第4版》 中 迭代与解析
解析与map
#ord 函数 获取单个字符的ASCII码
res =[]
for x in 'spam':
res.append(ord(x))
print(res)
#map用法 得到结果
res = list(map(ord,'spam'))
print(res)
#映射
res = [ord(x) for x in 'spam']
print(res)
输出
[115, 112, 97, 109]
[115, 112, 97, 109]
[115, 112, 97, 109]
map使用:
#习惯写法
print(list(map((lambda x: x ** 2),range(10))))
输出
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
三种对比写法:
res = [x for x in range(5) if x % 2 == 0 ]
print(res)
res = list(filter((lambda x: x%2 ==0),range(5)))
print(res)
res = []
for x in range(5):
if x % 2 == 0:
res.append(x)
print(res)
输出:
[0, 2, 4]
[0, 2, 4]
[0, 2, 4]
filter使用
#two
res = [x ** 2 for x in range(10) if x % 2 == 0]
print(res)
res = list( map( (lambda x: x**2),filter( (lambda x: x % 2 == 0), range(10)) ) )
print(res)
#列表中的for
res = [x + y for x in [1, 2, 3] for y in [100,200,300]]
print(res)
res = []
for x in [1, 2, 3]:
for y in [100, 200, 300]:
res.append(x+y)
print(res)
输出:
[0, 4, 16, 36, 64]
[0, 4, 16, 36, 64]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
列表解析与矩阵:
#列表解析与矩阵
M = [
[1,2,3],
[4,5,6],
[7,8,9]
]
N =[
[2,2,2],
[3,3,3],
[4,4,4]
]
#取数
res = [row[1] for row in M]
print(res)
res = [M[row][1] for row in (0,1,2)]
print(res)
输出:
[2, 5, 8]
[2, 5, 8]
生成器 yield 返回是个生成器:
#生成器 yield 返回是个生成器
def gensquares(N):
for i in range(N):
yield i ** 2
for i in gensquares(5):
print(i , end=' ')
print()
res = gensquares(5)
print(next(res))
#使用for map 实现
for x in [ n **2 for n in range(5)]:
print(x, end=' ')
print()
for x in map((lambda x: x**2), range(5)):
print(x, end=' ')
print()
输出:
0 1 4 9 16
0
0 1 4 9 16
0 1 4 9 16
迭代器遇到列表解析:
#迭代器遇到列表解析
for num in (x **2 for x in range(4)):
print('%s, %s' % (num, num /2.0))
ans = sum(x ** 2 for x in range(4))
print(ans)
ans = sorted((x ** 2 for x in range(4)),reverse = True)
print(ans)
#zip 与 map
res = list(zip([1,2,3]))
print(res)
res = list(zip([1,2,3],[2,3,4,5]))
print(res)
res = list(map(abs, [-2,-1,0,1,2]))
print(res)
输出:
0, 0.0
1, 0.5
4, 2.0
9, 4.5
14
[9, 4, 1, 0]
[(1,), (2,), (3,)]
[(1, 2), (2, 3), (3, 4)]
[2, 1, 0, 1, 2]
map fun 与解析:
#map fun
def myMap1(func, *seq):
res = []
for arg in zip(*seq):
res.append(func(*arg))
return res
print(myMap1(abs,[-2,-1,0,1,2]))
print(myMap1(pow,[1,2,3],[2,3,4,5]))
# using a list
def myMap2(func, *seq):
return [func(*args) for args in zip(*seq)]
print(myMap2(abs,[-2,-1,0,1,2]))
print(myMap2(pow,[1,2,3],[2,3,4,5]))
#解析列表
res = set()
for x in range(10):
res.add(x * x)
print(res)
res = {}
for x in range(10):
res[x] = x * x;
print(res)
输出:
[2, 1, 0, 1, 2]
[1, 8, 81]
[2, 1, 0, 1, 2]
[1, 8, 81]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}