For-Loop中最大浮点的意外值(Python)

时间:2017-06-20 17:33:20

标签: python for-loop floating-point

所以,我试图测试一个不同的程序的一部分,我遇到了一个我无法理解的输出

def load_asn1_data(filename='songdata.csv'):
    import csv
    reader=csv.reader(open(filename,'r'))
    songs=[]
    for r in reader:
        songs.append(r)
    return songs
def returnsong(songs):
    for row in songs:
        tempo=row[3]
    print max(tempo)

returnsong(load_asn1_data(filename='songdata.csv'))

我无法向您显示我的csv文件的所有速度值,但它们都在100-200 bpm的范围内。但是,如果我运行它,我的输出是8.我甚至尝试缩进我的print max(tempo)来查看我得到的所有值,然后我得到3-9的值范围。到底是怎么回事?如果我摆脱了max函数,它会完美地打印出值。

2 个答案:

答案 0 :(得分:0)

row的元素是字符串,因此按字母顺序排序:

max("3", '123', '200', '100')
# 3

如果你的行只包含整数,你可以这样做:

row = [int(x) for x in row]

转换它们。

row = ["3", '123', '200', '100']
row = [int(x) for x in row]
print(max(row))

# 200

答案 1 :(得分:0)

您的问题在这里:

for row in songs:
    tempo=row[3]

您告诉它识别第3个索引,然后从这3个数字中找到最大数字。所以要解决这个问题,你甚至不需要这个功能。在return语句的第一个函数中,使用:

return max(max(songs))

这将为您带来最大价值。