2013-04-30 71 views
11

我试图让这个字符串作为结果:Python字符串

"&markers=97,64&markers=45,84" 

从下面的Python代码:

markers = [(97,64),(45,84)] 
result = ("&markers=%s" %x for x in markers) 
return result 

如何做到这一点的下方不给我的实际字符串?

回答

22

你需要加入你的字符串是这样的:

markers = [(97,64),(45,84)] 
result = ''.join("&markers=%s" % ','.join(map(str, x)) for x in markers) 
return result 

UPDATE

我最初没有在那里','.join(map(str, x))部分把每个元组转换为字符串。这可以处理不同长度的元组,但是如果你总是有2个数字,你可能会在下面看到gatto的注释。

解释发生了什么是我们用标记中的每个元组为一个元素列表,将元组转换为逗号分隔的字符串,我们将其格式化为&markers=字符串。然后将这个字符串列表连接在一起,用空字符串分隔。

+0

'类型错误:没有formatting' – bereal 2013-04-30 14:24:59

+0

字符串转换期间,所有参数就抱怨它不是一个字符串,所以我做了这也返回一个生成器对象,而不是实际的字符串result =“”.join(str((“&marker =%s”%x为标记中的x))) – Reno 2013-04-30 14:27:28

+0

@gatto,除非元组长度可变。看到我更新的答案 – underrun 2013-04-30 14:30:11

7

虽然第一个答案是做什么的预期,我会让它多一点“Python的”通过摆脱map和嵌套的表达式:

def join(seq, sep=','): 
    return sep.join(str(i) for i in seq) 

result = ''.join('&markers=%s' % join(m) for m in markers) 

(如果这是对于网址喜欢它看来,你是还可以看看urllib.urlencode

+0

谷歌搜索'字符串理解蟒蛇',这只是我想找的那种东西。 – Somjit 2015-11-04 14:12:14

2

这里还有一个办法,希望让意图最为明确指定每个值的位置明确:

markers = [(97,64),(45,84)] 
print ''.join('&markers=%s,%s' % pair for pair in markers) 
0

尝试创建一个空字符串添加到它,然后去掉最后一个逗号

结果=“”

for i in a: 
    result+='&markers' 
    for j in i: 
    result += str(j) + ',' 
result = result[:len(result)-1] 

return result