Строка Python из понимания списка
Я пытаюсь получить эту строку в результате:
"&markers=97,64&markers=45,84"
Из приведенного ниже кода Python:
markers = [(97,64),(45,84)]
result = ("&markers=%s" %x for x in markers)
return result
Как это сделать, поскольку нижеследующее не дает мне фактическую строку?
Ответы
Ответ 1
Вам нужно присоединиться к вашей строке следующим образом:
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=
. Затем этот список строк объединяется вместе с пустой строкой.
Ответ 2
В то время как первый ответ делает то, что ожидается, я бы сделал его немного более "pythonic", избавившись от map
и вложенных выражений:
def join(seq, sep=','):
return sep.join(str(i) for i in seq)
result = ''.join('&markers=%s' % join(m) for m in markers)
(если это похоже на URL-адреса, вы также можете взглянуть на urllib.urlencode
)
Ответ 3
Вот еще один подход, который, как мы надеемся, делает его наиболее ясным, указав местоположение каждого из ваших значений явно:
markers = [(97,64),(45,84)]
print ''.join('&markers=%s,%s' % pair for pair in markers)
Ответ 4
Попробуйте создать пустую строку, добавив к ней, затем удалив последнюю запятую
result = ''
for i in a:
result+='&markers'
for j in i:
result += str(j) + ','
result = result[:len(result)-1]
return result