列表理解中的Python字符串

Ren*_*eno 20 python-2.7

我试图得到这个字符串:

"&markers=97,64&markers=45,84"
Run Code Online (Sandbox Code Playgroud)

从下面的Python代码:

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

我怎么做这个,因为下面没有给我实际的字符串?

und*_*run 29

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

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

UPDATE

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

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


ber*_*eal 8

虽然第一个答案正在做预期的事情,但我会通过摆脱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)
Run Code Online (Sandbox Code Playgroud)

(如果看起来像是网址,你也可以看看urllib.urlencode)


Plu*_*uto 8

在 Python 3.6 中,你可以这样写:

markers = [(97,64),(45,84)]
result = print(''.join(f'&markers={pair}' for pair in markers))
return result
Run Code Online (Sandbox Code Playgroud)

  • print() 可以被删除: `result=''.join(f'&markers={pair}' 对于标记中的对)` (2认同)

hex*_*rot 6

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

markers = [(97,64),(45,84)]
print ''.join('&markers=%s,%s' % pair for pair in markers)
Run Code Online (Sandbox Code Playgroud)