it-swarm.com.de

Python-String aus Listenverständnis

Ich versuche, diese Zeichenfolge als Ergebnis zu erhalten:

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

Aus dem Python-Code unten:

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

Wie mache ich das, da mir unten nicht die eigentliche Zeichenfolge angezeigt wird?

16
Reno

Sie müssen Ihre Zeichenfolge wie folgt verbinden:

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

UPDATE

Ich hatte anfangs nicht den ','.join(map(str, x))-Bereich, um jeden Tuple in Strings umzuwandeln. Dies behandelt Tupel mit unterschiedlicher Länge, aber wenn Sie immer genau zwei Zahlen haben, wird unten möglicherweise der Kommentar von gatto angezeigt.

Die Erklärung für das, was los ist, ist, dass wir für jeden Tupel aus Markierungen eine Liste mit einem Element erstellen, wodurch die Tupel in durch Kommas getrennte Strings umgewandelt werden, die wir in den &markers=-String formatieren. Diese Liste von Strings wird dann durch einen leeren String getrennt.

26
underrun

Während die erste Antwort das ist, was erwartet wird, würde ich etwas mehr "Pythonic" machen, indem ich map und verschachtelte Ausdrücke loswird:

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

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

(Wenn es sich um URLs handelt, wie es scheint, können Sie auch einen Blick auf urllib.urlencode werfen.)

8
bereal

Hier ist ein weiterer Ansatz, der die Absicht hoffentlich am deutlichsten macht, indem Sie die Position jedes Ihrer Werte explizit angeben:

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

Erstellen Sie eine leere Zeichenfolge, fügen Sie sie hinzu und entfernen Sie das letzte Komma

result = ''

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

return result
1
Daedalus

In Python 3.6 könnten Sie schreiben:

markers = [(97,64),(45,84)]
result = print(''.join(f'&markers={pair}' for pair in markers))
return result
0
user2226924