リストを実行し、特定の条件を満たさないすべての要素を削除する必要があります。具体的には、2 つの連続する要素 A と B があり、A が負で B が正 (すべての要素がゼロではない) で、これらの要素の比率が特定の比率よりも小さい場合は、それらを削除する必要があります。他のすべての要素はそのままにしておく必要があります。
最初は、リストをループして直接削除していました。ただし、リストの長さをループしていて、ループが実際にこの長さを変更していたため、インデックス エラーが発生していました。したがって、削除するのではなく、条件を満たすすべての要素を含む新しいリストを作成するだけでよいと考えました。これは正しいアプローチですか?これが私のコードです:
d_list = [1, -6, 7, -10, 11, -12, 13, -15, 17, -18, 19, -20, 23, -24, 29, -30, 31]
J = []
for i in range(0, len(d_list) - 1):
if ((d_list[i] < 0) & (d_list[i+1] > 0)):
if(math.fabs(d_list[i+1] / d_list[i]) >= 6/5):
J.append(d_list[i])
J.append(d_list[i+1])
else:
J.append(d_list[i])
私は出力として持つべきです: [1, -24, 29]
.
ただし、次のようになります[1, 7, 11, 13, 17, 19, 23, -24, 29, 29]
。
私は非常に混乱しており、上に示したコードのいくつかのバリエーションを試しましたが、成功しませんでした。