Python3 skills 9.20

map函数返回的是迭代器

f = lambda x: x**2
map(f,[1,2,3,4,5])
<map object at 0x000002118F69B888>

问题所在:
python3中map返回的是迭代器,可以通过list命令转换:

list(map(f,[1,2,3,4,5]))
[1, 4, 9, 16, 25]

列表推导式:简单语法表示嵌套语句

>>> v = [[1,2,3],[4,5,6],[7,8,9]]
>>> [num for elem in v for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

与以下语句等效,可以产生化简的功效

>>> c = []
>>> for elem in v:
...     for num in elem:
...             c.append(num)
>>> c
[1, 2, 3, 4, 5, 6, 7, 8, 9]

可以增加if语句:

>>> v = [[1,2,3],[4,5,6],[7,8,9]]
>>> [num for elem in v for num in elem if num%3==0]
[3, 6, 9]

#思考:以下两个语句判定时机有何不同?
>>> [num for elem in v for num in elem if len(elem)==3]
[3, 4, 5]
>>> [num for elem in v if len(elem)==3 for num in elem ]
[3, 4, 5]

多元列表推导式实现多元数组(与笛卡尔积)

我喜欢用“一元”“多元”的概念去理解是否同时遍历多个变量:这种方式可以快速创建一些用<e1,e2……>形式表示出来的ADT形成的数组。

>>> m = [1,2,3,4,5]
>>> n = [6,7,8,9,0]
>>> [(x,y) for x in m for y in n]

删除变量的del

如果不小心命名了关键字的变量,可以采用del方法删除

>>> list = [1,2,3]
>>> list()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
>>> del list
>>> list()
[]

切片的注意事项——与matlab的比较

个人认为matlab的切片比较直观,而python则需要记住几个法则:
(待续)

下一章将更新:生成器表达式,迭代器生成方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值