2014-06-19 2 views
1

저는 bash에 대한 많은 경험을 가지고 있지만, Python을 처음 접했습니다. 하나의 숫자 열로 구성된 파일이 있는데 목록에서 가장 큰 숫자를 찾고 싶습니다.왜 이런 파일에서 최대 수를 찾을 수 없습니까?

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를 받고, 이해가 안 :

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

jan14.nSets.txt는 다음입니다 : 나는 다음과 같은 코드를 그렇게하려고 노력 왜 그런가? 나는 이것을위한 내장 함수가 있음을 알고 있지만 이것이 언어를 이해하는 데 도움이되지 않는 이유를 알고 싶습니다. 나는 python2.7을 사용하고 있습니다.

답변

4

num문자열이며 숫자가 아닙니다. 당신은 텍스트를 비교하는

num = int(num) 

를, 그래서 ASCII 문자 '9''8'보다 더 높은 코드 포인트가 있기 때문에 사전 식, '9' > '80'를 주문한다 : 첫째 int() 사용하여 정수로 돌려 후에

>>> '9' > '80' 
True 

'9' 행의 경우 다른 모든 행의 첫 자릿수는 '9'보다 작거나 행이 동일합니다.

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

또는 generator expression (map()보다 효율적으로 파이썬 2에서, 더 많은 메모리) 사용 :

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

당신은 당신이 첫번째 정수로 모든 라인을 설정하는 map()를 사용하여 제공하는 대신 max() function 사용할 수 있습니다

두 줄 모두 data에서 모든 줄을 가져 와서 줄을 정수로 매핑하고 그 중 최대 값을 결정합니다.

+0

감사합니다. 나는 아직도 원래의 구현에서 9를 얻고 있다고 이해하지 못한다. – user3757134

+0

@ user3757134 : '노력'후에 '0'을 정렬하는 것은 동일한 원칙이다. 'z'는''e'보다 크고, 나머지 단어는 정렬 할 때 나타나지 않습니다. –

+0

@ user3757134 "9"는 알파벳순으로 "270"보다 큽니다. 텍스트의 경우 값의 비교는 알파벳순입니다. –