我有一个包含以下数据的文件:
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的值。 我无法理解这种错误的原因 请帮忙。
答案 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'
另请注意,这会解决您的字符串比较问题,并使用适当的从零开始的索引。