36

I am trying to get this string as a result:

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

From the Python code below:

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

How do I do this as the below does not give me the actual string?

4

5 回答 5

40

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

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

更新

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

对所发生的事情的解释是,我们从标记中为每个元组创建一个包含一个项目的列表,将元组转换为逗号分隔的字符串,我们将其格式化为&markers=字符串。然后将这个字符串列表连接在一起,由一个空字符串分隔。

于 2013-04-30T14:23:42.430 回答
11

在 Python 3.6 中,您可以编写:

markers = [(97,64),(45,84)]
result = ''.join(f'&markers={pair}' for pair in markers)
return result
于 2018-10-16T15:46:41.817 回答
10

map虽然第一个答案是做预期的事情,但我会通过摆脱和嵌套表达式使其更加“pythonic” :

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

于 2013-04-30T14:41:22.637 回答
6

这是另一种方法,希望通过明确指定每个值的位置来使意图最清楚:

markers = [(97,64),(45,84)]
print ''.join('&markers=%s,%s' % pair for pair in markers)
于 2013-04-30T14:42:53.070 回答
4

尝试创建一个空字符串添加到它然后删除最后一个逗号

结果 = ''

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

return result
于 2013-04-30T14:44:27.143 回答