如何将字符串分解为列表

时间:2013-08-01 04:40:58

标签: python

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

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...]

3 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

由于你不能使用map而且可能没有使用生成器,只需使用2 for for循环

另外听起来你可以使用字符串存储你的花车,这有助于你的精确度,因为浮动比较很麻烦。

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

Spoiler 如果你想计算这些花车的出现次数并将它们存储在dict中,因为它似乎是你的作业,你可以这样做:

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

答案 2 :(得分:0)

列表理解:

list_ = [
    float(number) for line in open("filename", "r") 
    for number in line.strip().split()
]