Napisałem następującą funkcję:

def read_coordinates(filename):
    invoerfile = open(filename)
    lines = invoerfile.readlines()
    for line in lines:
        seperate_coordinate_rows = line.split("=")
        for seperate_coordinate_row in seperate_coordinate_rows:
            row = seperate_coordinate_row.split()
            print row

Co daje mi te listy:

['5,4', '4,5', '8,7']
['6,3', '3,2', '9,6', '4,3']
['7,6']
['9,8']
['5,5', '7,8', '6,5', '6,4']

Co muszę dodać do tej funkcji, aby uzyskać listę z pływakami jako wyjście?

0
user2989433 28 listopad 2013, 17:19

5 odpowiedzi

Najlepsza odpowiedź

Możesz użyć tego:

row = map(lambda x: float(x.replace(',','.')), row)

Powyższe zwróci generator w Python 3.x, który może lub nie odpowiada Twoim potrzebom. Jeśli potrzebujesz rzeczywistej listy, masz dwie opcje:

# Convert the generator to a list (bad option)
row = list(row)

# Or use a list comprehension
row = [float(x.replace(',','.')) for x in row]
4
José Tomás Tocino 28 listopad 2013, 13:29

Umieść to wewnątrz swojego wewnętrznego do pętli.

row = [float(x.replace(',', '.') for x in row]
0
Steinar Lima 28 listopad 2013, 13:20

Aby upewnić się, że otrzymasz listę, najlepiej użyć rozumienia listy, ponieważ map nie zwraca listy w Python3

row = [float(x.replace(",", ".")) for x in seperate_coordinate_row.split()]
0
John La Rooy 28 listopad 2013, 13:21

Wymień dwie ostatnie linie

row = [float(item.replace(',', '.')) for item in seperate_coordinate_row.split()]
print row
0
Hoffmann 28 listopad 2013, 13:21

Mapuj swoje wartości do float():

row = map(float, seperate_coordinate_row.replace(',', '.').split())

map() wywołuje pierwszy argument dla każdej wartości w drugiej wartości, skutecznie zwracając listę wartości pływakowych.

Potrzebny jest tutaj .replace(), aby włączyć format do tego, który float() rozpoznaje.

Próbny:

>>> line = '5,4 4,5 8,7'
>>> map(float, line.replace(',', '.').split())
[5.4, 4.5, 8.7]

Jeśli używasz Pythona 3 lub chcesz użyć rozumienia listy, użyj:

[float(item.replace(',', '.') for item in seperate_coordinate_row.split()]

Tutaj .replace() jest stosowany do każdej pozycji podziału.

0
Martijn Pieters 28 listopad 2013, 13:29