在python中比较矩阵中的两列

2024-10-06 12:12:23 发布

您现在位置: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列的值,反之亦然。 我用过:

^{pr2}$

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

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

但如果第1行第5列的值82小于第7列的值。 我不明白这种错误的原因。
请帮忙。在


Tags: 文件数据loop错误carbonuraniumpairhelium
3条回答

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

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

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

其他答案已经解决了字符串比较的问题,但是我也建议您使用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'

还请注意,这解决了字符串比较问题,并使用了正确的基于零的索引。在

这是因为您要比较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

相关问题 更多 >