2

Python新手,所以这可能是一个愚蠢的问题,但经过一天的研究和执行代码后,我无法弄清楚这个问题。

我想获取两个整数列表(结果和设置)并以以下格式比较它们:

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

我需要对列表中的所有 # 执行此操作。

例如,如果Result1=4.6Setting1=4.3,我希望它比较 4.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迭代resultssettings串联:

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()来组合这两个列表:

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 回答
1

与列表和 python 几乎一样,可以在一行中完成:

print('ok' if all(setting - 0.1 <= result <= setting + 0.1 
    for setting, result in zip(settings, results)) else 'fail')
于 2013-05-09T21:18:56.560 回答
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 回答