2016-12-28 2 views
1

Я использовал этот код, чтобы открыть файл Excel, создавать списки каждой строки файла Excel:Как преобразовать все строки в списке в списке поплавки

import csv 
with open("csvfile.csv", "rb") as f: 
    lines = list(csv.reader(f)) 

>>> lines 
[['0', '23.345', '-122.456'], ['1', '12.546', '-118.987'] ['2', '67.435', '-104.112']] 

Я хочу сохранить списки каждой строки файла excel в большем списке, но я хочу, чтобы каждый элемент был float, а не строками. Какие изменения я должен был бы сделать?

т.е. [[0, 23.345, -122.456], [1, 12.546, -118.987], [2, 67.435, -104.112]]

ответ

3

Вы можете использовать вложенную список понимание в списке списков, как:

>>> my_list = [['0', '23.345', '-122.456'], ['1', '12.546', '-118.987'], ['2', '67.435', '-104.112']] 

>>> [[float(i) for i in sub_list] for sub_list in my_list] 
[[0.0, 23.345, -122.456], [1.0, 12.546, -118.987], [2.0, 67.435, -104.112]] 
+0

Вы можете заменить внутреннее понимание списка с картографическим статусом ление. '[list (map (float, sub_list)) для sub_list в my_list]' –

+0

@BurhanKhalid Следует игнорировать карту, когда это возможно. * list comprehension * более эффективен, чем 'map'. Фактически, даже Гвидо не был поклонником 'map()' –

+0

@burhankhalid вам не нужен список за пределами карты. – thebjorn

0

Изменение:

lines = list(csv.reader(f)) 

в:

lines = [[float(x) for x in line] for line in csv.reader(f)] 

т.е .:

import csv 
    with open("csvfile.csv", "rb") as f: 
     lines = [[float(x) for x in line] for line in csv.reader(f)] 
1

Использование map в список-понимания при чтении файла.

import csv 

with open("csvfile.csv", "rb") as f: 
    lines = [map(float, line) for line in csv.reader(f)] 

Сохраняет вы Создав список дважды (чтение, преобразование)

1

Вы можете использовать map() с list comprehension:

[map(float, sub_list) for sub_list in my_list] 

Выход:

>>> [map(float, sub_list) for sub_list in my_list] 
[[0.0, 23.345, -122.456], [1.0, 12.546, -118.987], [2.0, 67.435, -104.112]] 
Смежные вопросы