2013-04-30 20 views
11

Próbuję uzyskać ten ciąg w wyniku:Python ciąg z listy pojmowania

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

z kodu Pythona poniżej:

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

Jak mam to zrobić jak poniżej nie daje ja prawdziwy ciąg?

Odpowiedz

22

Musisz dołączyć swój ciąg tak:

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

UPDATE

ja początkowo nie posiada sekcję ','.join(map(str, x)) tam, aby włączyć każda krotka do strun. To obsługuje różne krotki długości, ale jeśli zawsze będziesz miał dokładnie 2 numery, możesz zobaczyć komentarz gatto poniżej.

Wyjaśnienie tego, co się dzieje jest to, że możemy zrobić listę z jednej pozycji dla każdej krotki z markerami, obracając krotki do oddzielonych przecinkami ciągi które formatu na ciąg &markers=. Ta lista ciągów jest następnie łączona razem, oddzielona pustym łańcuchem.

+0

'TypeError: nie wszystkie argumenty przekształcone w ciąg formatting' – bereal

+0

to narzekali nie było ciąg tak zrobiłem to, co zwraca również obiekt generatora, a nie rzeczywisty wynik ciągu znaków = "" .join (str (("& znacznik =% s"% x dla xw znacznikach))) – Reno

+0

@guatto, chyba że krotki mają zmienną długość. zobacz moją zaktualizowaną odpowiedź – underrun

7

Podczas gdy pierwsza odpowiedź jest robić to, co się spodziewać, że zrobię to nieco bardziej „pythonic” przez pozbycie map i zagnieżdżone wyrażenia:

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

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

(jeśli to dla adresów URL, jak się wydaje, wam można też spojrzeć na urllib.urlencode)

+0

Googled "Python ze zrozumieniem napisów", a to było właśnie coś, czego szukałem. – Somjit

2

Oto kolejny podejście sprawia, że ​​z nadzieją intencji najbardziej wyraźny, określając lokalizację każdego z wartościami wyraźnie:

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

Spróbuj utworzyć ciąg pusty dodając do niego wtedy Usunięcie ostatniego przecinka

wynik = „”

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

return result