理解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"]