如何挑选打印列表中的第一个数字并将其放入等式中



我有一个程序可以处理日志文件,将其缩小到两个项目。这就是我所得到的,这就是我的程序停止的地方,如下所示。但是我需要将两个项目中的第一个放入一个方程中,并将第二个项目放入另一个方程中。我该怎么做?

import pylab  
from pylab import *  
from numpy import *  
from collections import Counter  
list_of_files=[('logfile.txt', 'F')]  
datalist = [( pylab.loadtxt(filename), label ) for filename, label in list_of_files]  
for data, label in datalist:    
      print [k for k,v in Counter(data[:,1]).items() if v>1 and 1500<=k<2200]

当我运行上面的程序时,它会打印类似[1685, 1650]

所以我现在需要添加到上面的程序中,以便它自动将第一个数字 1685 放入一个方程中,然后将第二个数字 1650 放入另一个方程中并打印结果。

您无法从打印的内容中挑选出值。一旦打印出来,它就会被遗忘。

你必须将事物存储在变量中。然后你可以很容易地挑选出来。

例如,代替这个:

print [k for k,v in Counter(data[:,1]).items() if v>1 and 1500<=k<2200]

这样做:

thingies = [k for k,v in Counter(data[:,1]).items() if v>1 and 1500<=k<2200]
print thingies
print first_equation(thingies[0])
print second_equation(thingies[1])

您正在使用Counter来构建结果。Counter,像dict一样,没有顺序。 如果你加上a,然后是b,然后是c,你可能会得到a,然后是c,然后是b,或其他5个排列中的任何一个。

如果您需要保留原始订单,则必须手动处理。您可以通过使用单独的"键列表"、迭代k in keylist而不是k, v in counter.items() 以及使用counter[k]代替v来做到这一点。或者,更简单地说,只需用OrderedDictCounter构建一个OrderedCounter(如文档中的配方所示(,然后使用它:

thingies = [k for k,v in OrderedCounter(data[:,1]).items() if v>1 and 1500<=k<2200]

另一方面,如果您需要按某种排序顺序排列最终结果,则可以在事后对它们进行排序

thingies = sorted(k for k,v in Counter(data[:,1]).items() if v>1 and 1500<=k<2200)

在您的情况下,您需要"较高的值数字是 [0]",这听起来像您希望对它们进行排序,但顺序相反。所以:

thingies = sorted((k for k,v in Counter(data[:,1]).items() if v>1 and 1500<=k<2200),
                  reverse=True)

*当然,这不是真的;他们确实有一些顺序。但是这个顺序通常是没有用的,也不值得了解,除了重复迭代同一个字典而中间没有变化将始终得到相同的顺序。

最新更新