2

Python は初めてなので、これはおそらくばかげた質問ですが、1 日かけて調査してコードを実行した後も、これを理解することができませんでした。

整数の 2 つのリスト (結果と設定) を取得し、次の形式で比較したいと思います。

(Setting# - 0.1) <= Result# <= (Setting# +0.1)

リスト内のすべての # に対してこれを行う必要があります。

たとえば、 と の場合Result1=4.6Setting1=4.34.2 <= 4.6 <= 4.4 を比較したい (これは、 の許容範囲をはるかに超えているため、失敗し0.1ます。それを比較したら、リストを続行する必要があります。もちろん完成まで。

これは私が持っているようには機能していないようです。何か案は?

results = [Result1, Result2, Result3, Result4, Result5, Result6]
settings = [Setting1, Setting2, Setting3, Setting4, Setting5, Setting6]
for n in results and m in settings:
    if (m-.1) <= n <= (m+.1): #compare values with a + or - 0.1 second error tolerance
    print 'ok'
else:
    print 'fail'
print 'Done'
4

4 に答える 4

3

タンデムでzip反復するためresultsに使用する必要があります。settings

for n, m in zip(results, settings):
    if m - 0.1 <= n <= m + 0.1:
        print 'ok'
    else:
        print 'fail'
print 'Done' 
于 2013-05-09T21:11:05.037 に答える
1

zip()2 つのリストを結合するには、次を使用する必要があります。

for n, m in zip(results, settings):
    if (m-.1) <= n <= (m+.1):
        print 'ok'
    else:
        print 'fail'

zip()各入力シーケンスから n 番目の各要素を組み合わせて作成された新しいリストを作成します。

>>> a = range(5)
>>> b = 'abcde'
>>> zip(a, b)
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]

all()短絡テストに使用できます。できるだけ早くall()返します。代わりに、最初の数ペアだけがテストされる可能性があるまったく新しいリストを作成することを避けるために、ここでFalse使用します。itertools.izip()

from itertools import izip

if all((m-.1) <= n <= (m+.1) for n, m in izip(results, settings)):
    print 'All are ok'
else:
    print 'At least one failed'
于 2013-05-09T21:11:18.577 に答える
0
Setting = [4,3,5,6]
Result = [3,3.02,5.001,8]

print([ (x - 0.1) <= y <= (x + 0.1) for x,y in zip(Setting, Result)])

ブール値のリストとして結果を取得します

>>> 
[False, True, True, False]
于 2013-05-09T21:56:49.327 に答える