比较python中矩阵中的两列

时间:2012-05-04 03:39:26

标签: python

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

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  

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

3 个答案:

答案 0 :(得分:2)

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

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

作为旁注,项目将从0开始计数,所以我认为你可能想要比较第4和第6项。

答案 1 :(得分: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

答案 2 :(得分: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'

另请注意,这会解决您的字符串比较问题,并使用适当的从零开始的索引。