私は水が汚染されているかどうかを判断するためにコーディングプロジェクトに取り組んでいます。 1つのタイプの汚染では、5年のウインドウのサンプルの10%以上が所定の基準外である場合、水は汚染されているとみなされます。これに対処するために、私は次のコードカウンタを入れ子にした反復
def testLocationForConv(overDict):
impairedList=[]
for pollutant in overDict:
for date in dateList:
total=0
over=0
for compDate in dateList:
if int(date[0])+1825>int(compDate[0]) and int(date[0])-1825<int(compDate[0]):
total=total+1
if date[1]:
over=over+1
if total!=0:
if over/total>=.1:
if pollutant not in impairedList:
impairedList.append(pollutant)
return impairedList
コードが辞書をとり、水体のための汚染物質のリストを生成しますを行いました。ディクショナリのキーは汚染物質名の文字列で、値はテストの日付が最初の項目であるdateListとタプルのリストで、2番目の値はその日に測定された値が上またはここ
許容値の下でコードを入力として取ること "overDict" の例である:
{ '大腸菌':[( '40283'、偽)、( '40317 ('40405 '、False)、(' 40408 '、True)、(' 40437 '、True)、(' 40465 '、False)、(' 40505 '、False) False)、(40671、False)、(40671、False)、(40647、False)、(40671、False)、 ( '40801'、True)、( '40822'、False)、( '40710'、False)、 ' ( '41011'、False)、( '41045'、False)、( '41067'、False)、( '41228'、False)、( '41388'、False)、( ' ( '41792'、False)、( '41710'、False)、( '41439'、False)、( '41466'、False) 、偽)、( '41773'、偽)、( '41802'、偽)、( '41834'、偽)]}
この例では、コードは、それがexcedanceであると言うが、それはいけませんテストの10%未満が「真」であり、すべてのテストが5年間で行われたためです。ここで間違っているのは何ですか?
アップデート: 私はoverDictとして、この辞書を使用すると、コードが11個の値のうちの40745 2を起動し、ウィンドウに制限
{'copper': [('38834', False), ('38867', False), ('38897', False),
('40745', False), ('40764', False), ('40799', False), ('41024', True),
('41047', False), ('41072', True), ('41200', False), ('41411', False),
('41442', False), ('41477', False), ('41502', False)]}
を超えているにもかかわらず、このデータは超過していないと考えていますトラブルシューティングのために、 "for tuple"と "for window"のコード行の下にsliding_windowsを表示しました。これは、それぞれ異なる開始日が一度使用されるリストの代わりにこれを取得しました。
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
[[38834, 0, 1]]
インデントがオフになっていますが、修正できますか? – TemporalWolf
私たちは 'dateList'を持っておらず、インデントを修正する必要があります。 –
コードを少しきれいにして読みやすくする良い機会です。たとえば、複合条件付きの長い行と繰り返しのマジック番号があります。ブール関数を呼び出すシンプルな条件に変換します。 –