发布网友 发布时间:2022-05-10 09:44
共1个回答
热心网友 时间:2022-05-11 01:18
题主你好,
L=[x for x in map(fibs,range(10))] 涉及到两个重点知识:
a. 列表推导(list comprehension);
b. map函数的作用;
---------------
先说列表推导,最简单的列表推导其实就是for循环的简写形式,举例来说:
上面这三句,如果用列表推导的形式写:
[num for num in range(10)]
上面二者是等价的, 可以看出列表推导的形式,相比常规形式,省略了空列表的声明语句以及元素的追加语句
*.还有一个比较常见的形式是,for和if同时存在的情形:
使用列表推导的形式:
[num for num in range(10) if num%2==0]
这两种形式的转换规则题主仔细研究一下应该就能弄明白,再往清楚说我也说不清楚
*.当然还有更复导的列表推导,这里就不细说了, 上面这两种应该是最常见的
2.再说map函数, map函数定义为:
map(函数名, 可迭代对象)
返回值同参数2一样,也是一个可迭代对象
我先给你举个例子,你用这个例子去理解map函数:
比方说有一个盒子叫range(10),它里面有10个元素分别为0,1,2,3,4,5,6,7,8,9, 然后有一个机器叫increment,这个机器的作用是对range(10)这个盒子中的每个元素加1, 还有一个盒子叫result,它是用来存储被increment加工过的元素, 因为range(10)里面的元素为0-9,所以 result中的元素就是1-10, 而我们把从range(10)这个盒子中取元素让机器加工再将加工后的元素放到result盒子中的过程叫做map.
所以再回到题主的问题: L=[x for x in map(fibs,range(10))],
我们把题主的代码改个形式:
tmp = map(fibs, range(10))
L = [x for x in tmp]
这样一来应该就好理解了:
对于tmp = map(fibs, range(10)):
range(10)是第一个盒子, 它里面有10个元素0-9;
fibs是那个机器, 用来加工range(10)这个盒子中的每一个元素;
map()函数表示的是这个加工的过程;
tmp表示第二个盒子, 即存储的是range(10)这个盒子被fibs机器加工后的结果,即1,2,3,4,5,6,7,8,9,10;
---
对于L = [x for x in tmp], 其实就等价于:
希望可以帮到题主, 欢迎追问.