我对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
答案 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
拉入所有行,将行映射到整数,并确定这些行的最大值。