2016-03-29 23 views
1

Floatların listesini tam sayılara dönüştürmek istiyorum. Benim kodTypeError: bir float gerekli, Python

import math 

data1 = [line.strip() for line in open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r')] 
print type(data1) 
data1c = [int(math.floor(i)) for i in data1] 

print data1c[0] 

ne değişmelidir? hatlar

İhtiyacınız
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
1.200000e+03 
+0

Sen yüzer için dizeleri de çevirebilirsiniz dönüştürmek gereken bir şamandıra olduğu str tiptedir. 'data1 = [float (line.strip()) satır içi ...]' – khelwood

cevap

5

ait Dosya çok büyük, sadece çift ilk yüzer yayın yapmak için:

In [8]: int(float("1.23456e+03")) 
Out[8]: 1234 

Sen yapabilirsiniz:

[int(float(i)) for i in data1] 

int irade zemin sizin için numara arayarak hepsi mantıksal olarak:

with open("/home/milenko/Distr70_linux/Projects/Tutorial_Ex3/myex/base.txt", 'r') as f: 
    floored = [int(float(line)) for line in f] 

Dosyalarınızı açmak için with'u kullanmak iyi bir uygulamadır, dosyalarınızın sizin için kapatılmasını sağlar. Ayrıca int ve yüzer, önde gelen veya arkadaki beyaz alanı işleyebilir, böylece şerit kullanma konusunda endişelenmenize gerek kalmaz. Ayrıca

sadece yüzer çekin ve değil aynı zamanda zemin, map bir dosya veya herhangi iterable gelen yüzen, ints vb .. bir listesini oluşturarak güzel bir yoludur isteyen olsaydı:

floored = list(map(float, f)) 

Ya python2 eşdeğer kod itertools.imap

kullanarak olurdu

floored = list(map(int, map(float, f))) 

: harita, bir yineleyici döndürür python3 kullanarak, haritayı ikiye katla

+1

Cunningham Evet, şimdi çalışıyor. –

2

Veri dosyalarını okuma daima math.floor için gerekli parametre olarak

Yani şamandıra

data1c = [int(float(i)) for i in data1] 
İlgili konular