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则需要记住几个法则:
(待续)
下一章将更新:生成器表达式,迭代器生成方式。