簡體   English   中英

將列表元素轉換為數字

[英]Convert list elements to numbers

有一個包含以下三行的csv文件。

8.84,17.22,13.22,3.84
3.99,11.73,19.66,1.27
16.14,18.72,7.43,11.09

我正在編寫一個從文件中讀取行並將其附加到空列表的函數,以便可以將該列表用於計算均值。

以下是我編寫的代碼:

def my_calc(filename):
    mydata = []
    for line in open(filename).readlines():
         mydata = mydata + line.strip().split(',')
    return mydata

這是輸出:

['"8.84', '17.22', '13.22', '3.84"', '"3.99', '11.73', '19.66', '1.27"', '"16.14', '18.72', '7.43', '11.09"']

列表元素是字符串。 如何將它們轉換為浮點數?

我嘗試了map()但收到一條錯誤消息“無法將string轉換為float ”。

謝謝!

嘗試這個 :

a = ['"8.84', '17.22', '13.22', '3.84"', '"3.99', '11.73', '19.66', '1.27"', '"16.14', '18.72', '7.43', '11.09"']
result = map(float, map(lambda x : x.strip('"'), a))

輸出:

[8.84, 17.22, 13.22, 3.84, 3.99, 11.73, 19.66, 1.27, 16.14, 18.72, 7.43, 11.09]

如果是python3,請執行以下操作:

result = list(map(float, map(lambda x : x.strip('"'), a)))

您可以修改函數以僅將項目追加為浮點數:

import re

def my_calc(filename):
    mydata = []
    for line in open(filename).readlines():
        numbers = map(lambda x: float(x), re.sub("['\"]","",line).split(','))
        mydata.append(numbers)
    return mydata

那應該給出輸出:

[[8.84, 17.22, 13.22, 3.84], [3.99, 11.73, 19.66, 1.27], [16.14, 18.72, 7.43, 11.09]]
list = ["8.84,17.22,13.22,3.84", "3.99,11.73,19.66,1.27", "3.99,11.73,19.66,1.27"]
result = []
for el in list:
  strings = el.split(',')
  floats = []
  for el_s in strings:
    floats.append(float(el_s))
  result.append(floats)

print(result, type(result[0][0]))

https://repl.it/G9oO我不喜歡lambda,這可以為您提供幫助。

感謝您發布答案!

這是我的解決方案。 我花了您所有解決方案的點點滴滴來提出這一方案。

# Workable solution
mylist = []
a = ['"8.84', '17.22', '13.22', '3.84"', '"3.99', '11.73', '19.66', '1.27"', '"16.14', '18.72', '7.43', '11.09"']
for i in range(0,len(a)):
    mylist.append(a[i].lstrip('"').rstrip('"'))
    mylist = [float(x) for x in mylist]
print(mylist)

輸出:

[8.84, 17.22, 13.22, 3.84, 3.99, 11.73, 19.66, 1.27, 16.14, 18.72, 7.43, 11.09]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM