1

我有一个包含以下数据的文件:

PAIR 1MFK 1 URANIUM 82 HELIUM 112 3.6997  
PAIR 2JGH 2 PLUTONIUM 98 POTASSIUM 88 5.3003  
PAIR 345G 3 SODIUM 23 CARBON 14 1.664  
PAIR 4IG5 4 LITHIUM 82 ARGON 99 2.5506

现在,我必须找出第 5 列的值是否大于第 7 列的值,反之亦然。我用了:

inp = open("filename".'r').read().strip().split('\n')
for line in map(str.split, inp):
    k = line[5]
    m = line[7]
    if k > m:
        print 'loop 1 satisfies'
    elif m > k:
         print 'loop 2 satisfies'
    else:
         print 'loop error'

但问题是我得到的输出如下:

loop 1 satisfies  
loop 1 satisfies  
loop 1 satisfies  
loop 1 satisfies  

但是如果第一行第 5 列的值 82 小于第 7 列的值。我无法理解这种错误的原因。
请帮忙。

4

3 回答 3

2

这是因为您没有先将它们转换为数字,您的数据仍然是字符串。

>>> '82' < '112'
False
>>> 82 < 112
True

顺便说一句,这些项目将从 0 开始计数,所以我认为您可能打算比较第 4 项和第 6 项。

于 2012-05-04T03:43:43.680 回答
2

这是因为您正在比较Strings,将它们转换为integers第一个。

inp = open("filename",'r').read().strip().split('\n')
for line in map(str.split, inp):
  k = int(line[4]) #lists start at index 0 not 1
  m = int(line[6])
  if k > m: print 'loop 1 satisfies'
  elif m > k: print 'loop 2 satisfies'
  else: print 'loop error'

loop 2 satisfies
loop 1 satisfies
loop 1 satisfies
loop 2 satisfies
于 2012-05-04T03:43:53.167 回答
1

其他答案已经解决了您的字符串比较问题,但我还想建议您使用 Python 的csv模块来解决您的任务。csv.reader此文件中的列由空格分隔,使用对象更加简洁和节省内存。

修改后的代码如下所示:

import csv

inp = csv.reader( open("filename", "r"), delimiter=' ')
for line in inp:
    k = int(line[4]) # 5th column == index 4
    m = int(line[6]) # 7th col == index 6
    if k > m:
        print 'loop 1 satisfies'
    elif m > k:
        print 'loop 2 satisfies'
    else:
        print 'loop error'

另请注意,这可以解决您的字符串比较问题,并使用正确的从零开始的索引。

于 2012-05-04T03:50:41.153 回答