(一小时系列)python学习手册(5) 迭代与解析 (map ord zip yield)

又是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}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值