2017-04-16 122 views
1

我想在列表中圓的浮點數地板在python,我試過math.floor([i]),錯誤的是:a float is required,我也試過math.trunc([i]),我收到此錯誤:AttributeEror_trunc。 我找不到任何正確的代碼來解決這個問題。任何幫助,將不勝感激!四捨五入浮點數列表?

這裏是我到目前爲止的代碼:

with open ("G:\Speed\\december.sorted.movement.Sample.txt", 'r') as f: 
    firs_line = f.readline() 
    split=firs_line.split ("\t") 

    Speed = [r.split()[5] for r in f] 
    Speedf=[] 
    for item in Speed: 
     Speedf.append(float(item)) 

    denominator= 8677.8 
    i = [x/denominator for x in Speedf] 

    import math 
    v= math.floor([i]) 
    #print v [:5] 
+1

您是否試圖獲得每個數字在'i'列表中的位置?如果是這樣,爲什麼不''v = [math.floor(x /分母)for x in Speedf]'? –

+0

與'numpy.floor'不同,標準庫'math.floor'不採用列表。這種模式對於標準庫中的大部分都是正確的,因爲NumPy在接受像'numpy.sqrt'這樣的函數的數組時是Matlab-esque。 – blacksite

+0

有沒有理由不使用地板師呢? 'i = [x //在Speedf中x的分母]' –

回答

0

math.floor()只接受一個浮點值參數(或具有__floor__()方法的對象)。要應用它(或其他可調用採取一個參數)的整個列表,你可以使用list comprehension S作爲如下圖所示:

import math 

with open ('G:\\Speeds\\december.sorted.movement.Sample.txt', 'r') as f: 
    first_line = f.readline() 
    split = first_line.split('\t') 

    Speeds = [float(line.split()[5]) for line in f] 
    denominator = 8677.8 
    v = [math.floor(sp/denominator) for sp in Speeds] 
    print v[:5] 

如果您不需要Speeds列表爲別的,你甚至可以結合兩個列表解析合併爲一個,並做這樣的事情(雖然它的可讀性較差):

with open ('G:\\Speeds\\december.sorted.movement.Sample.txt', 'r') as f: 
    first_line = f.readline() 
    split = first_line.split('\t') 

    denominator = 8677.8 
    v = [math.floor(float(line.split()[5])/denominator) for line in f] 
    print v[:5] 
+0

感謝您簡化我的代碼,我喜歡您如何編寫它。我嘗試了代碼,但是樓層部分沒有返回正確的答案。它只是返回分區的浮點結果。你有什麼想法,爲什麼? – Zahra

+0

這是速度列出5項:[0.6910234249841702,59.13584700914624,1.9605857061766796,2.668716642021207,1.311176241044252] 而這正是它返回正如第五列表值:0.0,0.006798958261310471,0.00011523658070017747,0.00023047316140035494,0.00011523658070017747],所有的人都應該輪爲0,但他們不。 – Zahra

+0

啊,我看到了問題。給我一分鐘,我會更新我的答案 - 它是'速度'的'floor()'而不是'速度/分母'。 – martineau

2

math.floor需要一個浮點值。但是你似乎正在傳遞一個列表清單。

您可以使用列表理解:

v = [math.floor(float(x)) for x in i] 

應從i得到圓角值的列表。

也可以工作map功能:

list(map(lambda x: math.floor(float(x)), i))