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

时间:2013-10-03 23:11:40

标签: python list numpy

我有一个程序可以在日志文件上工作,将其缩小到两个项目。就我而言,这就是我的程序停止的地方,如下所示。但我需要将两个项目中的第一个放入等式中,然后将第二个项目放入不同的等式中。我怎么能这样做?

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放入一个不同的等式中并打印结果。

1 个答案:

答案 0 :(得分: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])

您正在使用Counter来构建搜索结果。 Counterdict一样,没有订单。*如果您添加ab,然后c,则可能会返回{{1}然后a,然后是c,或其他任何5种排列。

如果您需要保留原始订单,则必须手动处理。您可以使用单独的“密钥列表”,迭代b而不是k in keylist,并使用k, v in counter.items()代替counter[k]来执行此操作。或者,更简单地说,只需从vOrderedCounter中构建OrderedDict(如文档中的recipes所示),然后使用:

Counter

另一方面,如果你需要一些排序顺序的最终结果,你可以在事实之后对它们进行排序:

thingies = [k for k,v in OrderedCounter(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)

*当然这不是真的;他们确实有一些订单。但是顺序通常没有用,并且不值得知道,除了重复迭代相同的dict并且两者之间没有任何变化的事实总是得到相同的顺序。