1

ログファイルを 2 つの項目に絞り込むプログラムがあります。それは私が得た限りであり、以下に示すように私のプログラムが停止する場所です. しかし、2 つの項目のうち最初の項目を方程式に入れ、2 番目の項目を別の方程式に入れる必要があります。どうやってやるの?

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 を数式に自動的に入れ、次に 2 番目の数値 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])

を使用しCounterて結果を作成しています。ACounterは、 a のようにdict順序がありません。* を追加するaと、、 then b、then 、または他の 5 つの順列のいずれかcが返される可能性があります。acb

元の順序を維持する必要がある場合は、手動で処理する必要があります。別の「キー リスト」を使用し、 の代わりに繰り返し、 の代わりに使用することで、これを行うことができk in keylistます。または、もっと単純に、(ドキュメントのレシピに示されているように) から and を作成し、それを使用します。k, v in counter.items()counter[k]vOrderedCounterOrderedDictCounter

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 に答える