-3

这是我到目前为止所做的:

def file_to_dict(f):

""" (file open for reading) -> dict of {float: int}

f contains exchange rate changes as floating point numbers separated
by whitespace. Return a dict with exchange rate changes as keys and the
number of occurrences of the exchange rate changes as values.
"""

file = open(f, 'r')
data = list(file.read().strip().split('\n'))

数据是:

0.0045  0.0160 -0.0028 -0.0157 -0.0443 -0.0232 -0.0065 -0.0080  0.0052
-0.0052 -0.0283 -0.0087 -0.0020 -0.0080 -0.0065 -0.0290  0.0180  0.0030
-0.0170  0.0000 -0.0185 -0.0055  0.0148 -0.0053  0.0265 -0.0290  0.0010
-0.0015  0.0137 -0.0137 -0.0023  0.0008  0.0055 -0.0025 -0.0125  0.0040

如何使每个数字成为列表中的项目?例如:[0.0045, 0.0160, etc...] or ['0.0045', '0.0160', etc...]

4

3 回答 3

1

像这样的东西?

>>> with open('fileName', 'r') as f:
        newList = []
        for line in f:
            newList.extend(map(float, line.split()))


>>> newList
[0.0045, 0.016, -0.0028, -0.0157, -0.0443, -0.0232, -0.0065, -0.008, 0.0052, -0.0052, -0.0283, -0.0087, -0.002, -0.008, -0.0065, -0.029, 0.018, 0.003, -0.017, 0.0, -0.0185, -0.0055, 0.0148, -0.0053, 0.0265, -0.029, 0.001, -0.0015, 0.0137, -0.0137, -0.0023, 0.0008, 0.0055, -0.0025, -0.0125, 0.004]

因为,你不能使用map(),做类似的事情

>>> with open('fileName', 'r') as f:
        newList = []
        for line in f:
            for elem in line.strip().split():
                newList.append(float(elem))
于 2013-08-01T04:43:02.977 回答
0

由于您不能使用 map 并且可能也没有生成器,因此只需使用 2 个 for 循环

此外,听起来您可以使用字符串来存储您的浮点数,这将有助于您的精度,因为浮点数比较是混乱的。

stringlist = []
with open('fileName', 'r') as file:
for line in file:
    for item in line.split():
        stringlist.append(item)        # this stores strings

剧透,如果你想计算这些浮点数的出现并将它们存储在一个字典中,因为这似乎是你的任务,你可以这样做:

myDict = {}
for value in stringlist:
    if value in myDict.keys():  # this would pose float comparison issues if you used float keys
        myDict[value] += 1
    else:
        myDict[value] = 1

print myDict
于 2013-08-01T04:48:24.507 回答
0

列表理解:

list_ = [
    float(number) for line in open("filename", "r") 
    for number in line.strip().split()
]
于 2013-08-01T05:30:09.097 回答