myślę kiedy zaczynają programowanie warto zobaczyć kilka przykładów; i zakładam, że najpierw próbowałeś tego problemu samemu!
Oto break-down, w jaki sposób można podejść do tego:
contents='0.259515E+03 0.235095E+03 0.208262E+03 0.230223E+03 0.267333E+03 0.217889E+03 0.156233E+03 0.144876E+03 0.136187E+03 0.137865E+00'
W split method prace nad strunami. Zwraca listę ciągów. Domyślnie, to dzieli się na białe znaki:
string_numbers=contents.split()
print(string_numbers)
# ['0.259515E+03', '0.235095E+03', '0.208262E+03', '0.230223E+03', '0.267333E+03', '0.217889E+03', '0.156233E+03', '0.144876E+03', '0.136187E+03', '0.137865E+00']
map command dotyczy pierwszego argumentu (funkcja float
) do każdego z elementów jej drugiego argumentu (lista string_numbers
). Funkcja float
konwertuje każdy ciąg znaków na obiekt zmiennoprzecinkowy.
float_numbers=map(float,string_numbers)
print(float_numbers)
# [259.51499999999999, 235.095, 208.262, 230.22300000000001, 267.33300000000003, 217.88900000000001, 156.233, 144.876, 136.18700000000001, 0.13786499999999999]
Można użyć list comprehension przetwarzać listy, konwersji liczb mniej niż 1 do numeru 1. conditional expression(1 if num<1 else num)
równa 1 gdy num jest mniejsza niż 1, w przeciwnym razie, to równa num.
processed_numbers=[(1 if num<1 else num) for num in float_numbers]
print(processed_numbers)
# [259.51499999999999, 235.095, 208.262, 230.22300000000001, 267.33300000000003, 217.88900000000001, 156.233, 144.876, 136.18700000000001, 1]
To jest to samo, wszystko w jednym wierszu:
processed_numbers=[(1 if num<1 else num) for num in map(float,contents.split())]
wygenerować ciąg Spośród elementów processed_numbers
, można użyć str.join
method:
comma_separated_string=', '.join(map(str,processed_numbers))
# '259.515, 235.095, 208.262, 230.223, 267.333, 217.889, 156.233, 144.876, 136.187, 1'
to jest świetne. Spędziłem dzisiaj wieki zastanawiając się, dlaczego wyrażenie warunkowe nie działa, a następnie zdałem sobie sprawę, że muszę uaktualnić wersję 2.4 – hjp