我尝试了以下说明:
>>> values ['9', '31', '32']
>>> map('abc'.join, values)
and got:
['9', '3abc1', '3abc2']
但我预料到:
['abc9', 'abc31', 'abc32']
为什么我错了?
只是为了记录我用它来规避它:
>>> map(lambda x: 'abc%s' % x, values)
但是我仍然对第一个地图构造的行为感到困惑!
感谢所有有见地的答案。他们都是正确和有帮助的,所以我不得不扔骰子来选择接受哪个 - 我会接受其中任何一个; - )
答案 0 :(得分:5)
你想要的是
["abc" + x for x in values]
方法str.join()
使用点之前的部分作为字符串,通过该字符串连接其他字符串的可迭代。这就是为什么
"abc".join(["12", "34"])
结果
"12abc34"
如果您只是将字符串作为iterable传入,则各个字符是此iterable的项目:
"abc".join("1234")
结果
"1abc2abc3abc4"
答案 1 :(得分:1)
'abc'.join(l)
在加入abc
l
作为分隔符
使用values
列表进行映射时,values
中的每个项都会调用一次该方法。由于字符串在Python中是可迭代的,因此每个字符都用作项目。
答案 2 :(得分:1)
这将随后调用
'abc'.join('9')
给出'9'
,因为给定参数中只有一个元素join
,然后
'abc'.join('31')
由于'31'
与['3', '1']
相似,结果为'3abc1'
,依此类推。
答案 3 :(得分:1)
不确定为什么你期望这样。您要求为值中的每个元素运行'abc'.join(x)
。这些元素中的每一个都是一个可迭代的字符串:实际上,它是一个字符列表。因此'abc'.join('31')
与'abc'.join(['3', '1'])
相同,后者会给出结果。
答案 4 :(得分:1)
如果您只想连接字符串,请使用str + str
或str.format()
并使用正确的{}
内部字符串
values = ['9', '31', '32']
map('abc{}'.format, values)
或更简单地使用列表理解:
values = ['9', '31', '32']
['abc{}'.format(v) for v in values]