2011-10-06 67 views
-1

我是新來的Python,所以道歉,如果這似乎非常簡單:循環遍歷嵌套列表 - 從字符串轉換爲浮動

我有4列和十行的csv文件。我將比賽作爲列表(列表列表)導入,並且內容以字符串形式出現。我想要做的是循環遍歷列表(可以是可變數量的行)並將索引2字符串轉換爲浮點數。我運行下面的代碼,但是當我列出列表時,所有東西仍然是一個字符串:

import csv 

def main(): 
    benchmark = list(csv.reader(open('test.csv', 'r'))) 

    for i in range((len(benchmark))): 
     benchmark[i][2] = float(benchmark[i][2]) 

任何幫助將不勝感激。

謝謝!

+0

該代碼適用於我。 – interjay

+0

由於這段代碼是正確的,所以您需要發佈一個完整的示例,包括輸入數據以及如何檢查該值是否仍然是字符串。 – interjay

回答

2

沒必要將csv.reader強制轉換爲列表,因爲它已經可以迭代。您可以執行以下操作:

benchmark=[] 
with open('test.csv','r') as inp: 
    csvin=csv.reader(inp) 
    for row in csvin: 
     benchmark.append(row[:1] + [float(row[1])] + row[2:]) 
+0

這會將每列的第二個字符轉換爲浮點數,可能不是您想要的。即使你解決了這個問題,原始代碼對我來說似乎更加清晰。 – interjay

+0

@interjay你說得對,謝謝!與地圖/ lambda有點過分。 –

0

這可能會工作,但我不能沒有測試數據的測試。

>>> benchmark = [[1, 2, 3, 4], [5, 6, 7, 8]] 
>>> [[float(col) if i == 2 else col for i, col in enumerate(row)] for row in benchmark] 
[[1, 2, 3.0, 4], [5, 6, 7.0, 8]] 
+1

這正是我所期待的,非常感謝。 – donopj2