我正在尝试理解这些代码行之间的区别:
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']
。
这里有什么问题?
答案 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"]