了解Python地图功能+范围

时间:2016-06-11 23:38:09

标签: python python-3.x map-function

我正在尝试理解这些代码行之间的区别:

list(''.join(map(lambda x: str(x * 3), range(1, 4))))

Out:['3', '6', '9']正如所料。

但是:

list(''.join(map(lambda x: str(x * 5), range(1, 4))))

输出['5', '1', '0', '1', '5'],而我预期:['5','10','15']

以同样的方式

[x for x in map(lambda x: str(x * 5), range(1, 4))]

输出['5','10','15']

这里有什么问题?

2 个答案:

答案 0 :(得分:10)

您首先将所有字符串连接成一个大字符串,然后将该字符串转换为列表,这总是导致所有单个字符被拉出作为元素:

>>> list(map(lambda x: str(x * 5), range(1, 4)))
['5', '10', '15']
>>> ''.join(map(lambda x: str(x * 5), range(1, 4)))
'51015'
>>> list(''.join(map(lambda x: str(x * 5), range(1, 4))))
['5', '1', '0', '1', '5']

如您所见,您需要做的就是删除str.join()来电,只需直接在list()上使用map()

list(map(lambda x: str(x * 5), range(1, 4)))

答案 1 :(得分:2)

第一个片段中的所有数字都是单位数字,因此加入它们并拆分它们不会有所作为。见Martijn Pieters answer。在第二个中它会有所不同,因为有些是两位数字。

示例:

[3, 6, 9] join -> 369 split -> ["3", "6", "9"]
[5, 10, 15] join -> 51015 split -> ["5", "1", "0", "1", "5"]