我有一个程序可以在日志文件上工作,将其缩小到两个项目。就我而言,这就是我的程序停止的地方,如下所示。但我需要将两个项目中的第一个放入等式中,然后将第二个项目放入不同的等式中。我怎么能这样做?
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放入一个不同的等式中并打印结果。
答案 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
来构建搜索结果。 Counter
与dict
一样,没有订单。*如果您添加a
,b
,然后c
,则可能会返回{{1}然后a
,然后是c
,或其他任何5种排列。
如果您需要保留原始订单,则必须手动处理。您可以使用单独的“密钥列表”,迭代b
而不是k in keylist
,并使用k, v in counter.items()
代替counter[k]
来执行此操作。或者,更简单地说,只需从v
和OrderedCounter
中构建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并且两者之间没有任何变化的事实总是得到相同的顺序。