Uso str.join()
:
>>> mystring = ' '.join(map(str, (34.2424, -64.2344, 76.3534, 45.2344)))
>>> print mystring
34.2424 -64.2344 76.3534 45.2344
Dovrete usare mappa qui (che converte tutti gli elementi nella tupla di stringhe) perché altrimenti si otterrà un TypeError
.
Un po 'di chiarezza sulla funzione map()
:
map(str, (34.2424, -64.2344, 76.3534, 45.2344)
è equivalente a [str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]
.
E 'un pochino più veloce rispetto all'utilizzo di una lista di comprensione:
$ python -m timeit "map(str, (34.2424, -64.2344, 76.3534, 45.2344))"
1000000 loops, best of 3: 1.93 usec per loop
$ python -m timeit "[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]"
100000 loops, best of 3: 2.02 usec per loop
Come mostrato nei commenti a questa risposta, str.join()
può prendere un generatore invece di una lista. Normalmente, questo sarebbe più veloce, ma in questo caso, è più lento.
Se dovessi fare:
' '.join(itertools.imap(str, (34.2424, -64.2344, 76.3534, 45.2344)))
Sarebbe più lento rispetto all'utilizzo di map()
. La differenza è che imap()
restituisce un generatore, mentre map()
restituisce una lista (in python 3 restituisce un generatore)
Se dovessi fare:
''.join(str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344))
Sarebbe più lento di mettere tra parentesi intorno alla elencare la comprensione, per motivi spiegati here.
Nel tuo caso (OP), nessuna delle due opzioni è davvero importante, in quanto le prestazioni non sembrano un grosso problema qui. Ma se hai a che fare con grandi tuple di float/interi, ora sai cosa usare per la massima efficienza :).
In Python 3, la risposta è buona, perché '' map() '' è un generatore in Python 3. Ma in python2, sarebbe meglio usa '' imap() '' – eyquem
@eyquem Non penso che le prestazioni siano un problema enorme qui: p – TerryA
@eyquem in realtà è più veloce e più efficiente usare un comp elenco piuttosto che un generatore per un join: http: // stackoverflow.com/a/9061024/1240268 –