为什么我不能在这样的文件中找到最大数字?

时间:2014-06-19 15:39:04

标签: python loops conditional-statements

我对python很新,虽然我对bash有很多经验。我有一个由一列数字组成的文件,我想在列表中找到最大的数字。我尝试使用以下代码执行此操作:

i = 0
with open('jan14.nSets.txt','r') as data:
    for num in data:
        if num > i:
            i = num
print(i)

其中jan14.nSets.txt如下:

12
80
46
51
0
64
37
9
270
23
132
133
16
6
18
23
32
75
2
9
6
74
44
41
56
17
9
4
8
5
3
27
1
3
42
23
58
118
100
185
85
63
220
38
163
27
198

而不是270,我收到9作为输出,我不明白为什么会这样。我知道有内置的,但我想知道为什么这不能帮助我理解语言。我正在使用python2.7

1 个答案:

答案 0 :(得分:4)

num字符串,而不是数字。首先使用int()

将其转换为整数
num = int(num)

您正在比较文字,因此按字典顺序'9' > '80'进行排序,因为ASCII字符'9'的代码点高于'8'

>>> '9' > '80'
True

'9'行之后,所有其他行的初始数字小于'9',或者行相等。

如果您首先使用max() function将所有行转换为整数,则可以改为使用map()

with open('jan14.nSets.txt','r') as data:
    i = max(map(int, data))

或使用generator expression(在Python 2中,内存效率高于map()):

with open('jan14.nSets.txt','r') as data:
    i = max(int(num) for num in data)

data拉入所有行,将行映射到整数,并确定这些行的最大值。