2011-06-28 12 views
22

Mam listę pływaków w PythonieDołącz do listy pływaka w przestrzeni oddzielone ciąg w Pythonie

a = [1.2, 2.9, 7.4] 

Chcę połączyć je wytwarzać ciąg oddzielonych spacjami - tj .:

1.2 2.9 7.4 

jednak gdy próbuję:

print " ".join(a) 

otrzymuję komunikat o błędzie, ponieważ są one pływaków, a gdy próbuję:

print " ".join(str(a)) 

uzyskać

[ 1 . 2 , 1 . 8 , 5 . 2 9 9 9 9 9 9 9 9 9 9 9 9 9 9 8 ] 

Jak mogę dołączyć wszystkie elementy, podczas przekształcania elementów (indywidualnie) do ciągów, bez konieczności pętli przez nich wszystkich?

Odpowiedz

55

Trzeba przekonwertować każdy wpis na liście do łańcucha, a nie cała lista naraz:

print " ".join(map(str, a)) 

Jeśli chcesz mieć większą kontrolę nad konwersją na ciąg (np kontrolę ilu cyfr do wydruku) , możesz użyć:

print "".join(format(x, "10.3f") for x in a) 

Zobacz the documentation of the syntax of format specifiers.

+11

+1 Alternatywnie do pierwszego, '””.join (str (x) for x in a)' (w Pythonie 2.x, to mieć również małą praktyczną zaletę - nie przydzieli pamięci dla wszystkich pośrednich ciągów jednocześnie). – delnan

+2

Dla sformatowanych łańcuchów, ''' .join ("% 10.3f "% x dla x w a)' jest dwa razy szybsze niż "format (x," 10.3f ")' wersja na moim komputerze (testowane z listą z 1000 'losowych()' pływaków). –

1

Właściwie musisz przez nie przechodzić. Z generatorem lub listowego, który wygląda dość czyste:

print " ".join(str(i) for i in a) 

(mapa pętle przez nich, podobnie jak kod format)

Generator ma przewagę nad listowego nie generując drugą listę pośrednią , tym samym zachowując pamięć. Lista rozumienie byłoby:

print " ".join([str(i) for i in a]) 
Powiązane problemy