使用字符串列表映射`string.join`会返回未检测到的字符串列表

时间:2012-02-24 15:26:36

标签: python string list python-2.6

我尝试了以下说明:

>>> values ['9', '31', '32']
>>> map('abc'.join, values)
and got:
['9', '3abc1', '3abc2']

但我预料到:

['abc9', 'abc31', 'abc32']

为什么我错了?

只是为了记录我用它来规避它:

>>> map(lambda x: 'abc%s' % x, values)

但是我仍然对第一个地图构造的行为感到困惑!

感谢所有有见地的答案。他们都是正确和有帮助的,所以我不得不扔骰子来选择接受哪个 - 我会接受其中任何一个; - )

5 个答案:

答案 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 + strstr.format()并使用正确的{}内部字符串

values = ['9', '31', '32']
map('abc{}'.format, values)

或更简单地使用列表理解:

values = ['9', '31', '32']
['abc{}'.format(v) for v in values]