首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将一行中的值与另一行中的值进行比较?

如何将一行中的值与另一行中的值进行比较?
EN

Stack Overflow用户
提问于 2019-06-11 05:37:31
回答 3查看 297关注 0票数 0

我有一个文件,它输出了每行都有两个值的行。我需要比较每一行中的第二个值,以确保这些值不会重复多次。我对编码非常陌生,所以如果有任何帮助,我将不胜感激。

我的想法是将每一行转换为一个列表,每行包含两个项目,然后我可以比较两个列表中相同的位置。

这是我的文件包含的内容的一个示例:

代码语言:javascript
复制
20:19:18 -1.234567890
17:16:15 -1.098765432
14:13:12 -1.696969696
11:10:09 -1.696969696
08:07:06 -1.696969696

这是我正在尝试使用的代码。基本上,我希望它忽略前两行并打印出第三行,因为它会重复多次:

代码语言:javascript
复制
with open('my_file') as txt:                                                                                           

   for line in txt: #this section turns the file into lists                                                                                                                              
       linelist = '%s' % (line)                                                                                                                   
       lista = linelist.split(' ')                                                                                                                

   n = 1                                                                                                                                          
   for line in lista:                                                                                                                             
       listn = line[n]                                                                                                                       
       listo = line[n + 1]                                                                                                                   
       listp = line[n + 2]                                                                                                                   
       if listn[1] == listo[1] and listn[1] == listp[1]:                                                                                                                   
           print line                                                                                                                             
       else:                                                                                                                                      
           pass                                                                                                                                   
       n += 1   

我想看到的是:

代码语言:javascript
复制
14:13:12 -1.696969696

但是我一直收到"string index out of range“这条长if语句的错误。

EN

回答 3

Stack Overflow用户

发布于 2019-06-11 06:24:53

使用字典类型的结构会好得多。字典允许您快速检查是否存在。

基本上检查第二个值是否是你的字典中的关键字。如果是键,则打印该行。否则,只需添加第二个值作为键供以后使用。

代码语言:javascript
复制
myDict = {}
with open('/home/dmoraine/pylearn/%s' % (file)) as txt:
    for line in txt:
        key = line.split()[1]
        if key in myDict:
            print(line)
        else:
            myDict[key] = None #value doesn't matter
票数 1
EN

Stack Overflow用户

发布于 2019-06-11 06:36:06

一些简单的调试突出了功能问题:

代码语言:javascript
复制
with open('my_file.txt') as txt:
   for line in txt: #this section turns the file into lists
       linelist = '%s' % (line)             
       lista = linelist.split(' ')          
       print(linelist, lista)

   n = 1                                    
   for line in lista:                       
       print("line", n, ":\t", line)
       listn = line[n]                 
       listo = line[n + 1]             
       listp = line[n + 2]             
       print(listn, '|',listo, '|',listp)
       if listn[1] == listo[1] and listn[1] == listp[1]:             
           print(line)                      
       n += 1   

输出:

代码语言:javascript
复制
20:19:18 -1.234567890
 ['20:19:18', '-1.234567890\n']
17:16:15 -1.098765432
 ['17:16:15', '-1.098765432\n']
14:13:12 -1.696969696
 ['14:13:12', '-1.696969696\n']
11:10:09 -1.696969696
 ['11:10:09', '-1.696969696\n']
08:07:06 -1.696969696
 ['08:07:06', '-1.696969696\n']
line 1 :     08:07:06
8 | : | 0

简而言之,您错误地处理了变量。当您到达第二个循环时,lista是最后一行的“单词”;您已经阅读并丢弃了所有其他内容。line遍历这些单独的单词。因此,listn/o/p变量是单独的字符。因此,不存在listn[1]这样的东西,您会得到一个错误。

相反,您需要构建某种类型的浮点数列表。例如,使用top循环作为起点:

代码语言:javascript
复制
float_list = {}
for line in txt: #this section turns the file into lists                                                                                       
    lista = line.split(' ')
    my_float = float(lista[1])         # Convert the second field into a float
    float_list.append(my_float)

现在,您需要编写在float_list中查找重复项的代码。你能从那里接下来吗?

票数 1
EN

Stack Overflow用户

发布于 2019-06-15 04:11:02

最后把每一行都变成一个列表,然后把所有的列表都编成一个字典。感谢大家的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56533852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档