1

我有一个在日志文件上工作的程序,可以将其缩小到两个项目。据我所知,这就是我的程序停止的地方,如下所示。但是我需要将这两项中的第一项放入一个方程式中,并将第二项放入另一个方程式中。我怎样才能做到这一点?

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 放入另一个方程式并打印结果。

4

1 回答 1

1

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

您必须将事物存储在变量中。然后你就可以轻松挑选出来了。

例如,而不是这个:

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])

您正在使用 aCounter来构建结果。ACounter和 a 一样dict,没有顺序。* 如果您添加a, then b, then c,您可能会返回a, then c, thenb或其他 5 种排列中的任何一种。

如果您需要保留原始订单,则必须手动处理。您可以通过使用单独的“密钥列表”,迭代k in keylist而不是k, v in counter.items(),并使用counter[k]代替v. 或者,更简单地说,只是构建一个OrderedCounter和(如文档中的食谱所示),并使用它:OrderedDictCounter

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)

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

于 2013-10-03T23:13:55.543 回答