理解Python映射函数+;范围

理解Python映射函数+;范围,python,python-3.x,map-function,Python,Python 3.x,Map Function,我试图理解这些代码行之间的区别: list(''.join(map(lambda x: str(x * 3), range(1, 4)))) 输出:['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

我试图理解这些代码行之间的区别:

list(''.join(map(lambda x: str(x * 3), range(1, 4))))
输出:
['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']

这里出了什么问题?

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

>>> 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()
调用,只需直接在
map()上使用
list()


第一个代码段中的所有数字都是个位数,所以连接和拆分它们不会有什么区别。看见第二种情况会有所不同,因为有些是两位数

例如:

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

注意:海报删除了对Martijn Pieters的评论,请回答检查编辑
[3, 6, 9] join -> 369 split -> ["3", "6", "9"]
[5, 10, 15] join -> 51015 split -> ["5", "1", "0", "1", "5"]