4

次の質問がありますが、答えが見つからないようです。私の Python の知識は基本的なもので、現在バージョン 2.7.2 と 2.6.5 を使用しています。

次のリストがあるとします。

list1 = [1642842,780497,1506284,1438592,1266530,1154853,965861,610252,1091847,1209404,1128111,749998]

2品目(品目0、1、品目1、2、品目2、3など)ごとの要因差を知りたい。

出力は次のようになります (ただし、小数点以下 1 桁に切り上げることが望ましい)。

list2 = [2.1048665145,0.5181605859,1.047054342,1.1358530789,1.0967023509,1.195672048, 1.5827248415,0.5589171377,0.9027975763,1.0720611713,1.5041520111]

私が探している最終的な結果は、係数が 1.5 を超える場合、2 つのリスト項目の番号とその係数値を報告したいということです。

項目 0,1 値 2.1

項目 6,7 値 1.6

項目 10,11 値 1.5

どうすればいいですか?

数値の差を見つけることは、次の方法で簡単に行うことができます。

print numpy.diff(list1)

また

for i in (abs(x - y) for (x, y) in zip(list1[1:], list1[:-1])):
    print i

しかし、上記の質問の解決策を見つけるために頭を悩ませていますか? 上記のコードでいくつかのことを試しましたが、良い結果が得られないようです。

また、最初に list1 のデータをフィルタリングしますが、以前にゼロ除算の問題を引き起こした後続のゼロ値が含まれることにも注意してください。

編集:解決策をありがとう、それらのほとんどは私が望むことを正確に行います。残念ながら、これらのリストの項目の位置は固定されています。この情報は破棄できないため、「ZeroDivisionError: ゼロによる浮動小数点数の除算」のようなエラーを防ぐためにリストから項目の一部を除外することは、実際にはオプションではありません。もう少し説明すると、次の形式のリストが存在する可能性があります。

list1 = [0,0,0,0,0,0,0,0,2,5,65,456,456456,456564,456666,666666,2344,233,232,122,88,6,0,0,0,0]

この問題に対処するための以下のソリューションのいずれかを使用した Pythonic の方法は何ですか? 出力についてもう少し具体的に説明します。

項目 0,1 値 0

項目 1,2 値 0

項目 2,3 値 0

項目 8,9 値 2.5

項目 9,10 値 13

最終編集: 修正する問題を作成する代わりに、とにかくデータをフィルター処理します。答えてくれてありがとう!

4

5 に答える 5

1
>>> g = ((i, i + 1, round(1.0 * list1[i] / list1[i + 1], 2)) for i in range(len(list1) - 1))
>>> print [x for x in g if x[2] >= 1.5]
[(0, 1, 2.1), (6, 7, 1.58), (10, 11, 1.5)]

また

>>> g1 = ((i, i + 1) for i in range(len(list1) - 1))
>>> g2 = ((x, y, round(float(list1[x]) / list1[y], 2)) for x, y in g1)
>>> print [x for x in g2 if x[2] >= 1.5]
[(0, 1, 2.1), (6, 7, 1.58), (10, 11, 1.5)]
于 2013-07-30T12:02:14.883 に答える