Python的新手,所以这可能是一个愚蠢的问题,但经过一天的研究和执行代码后,我无法弄清楚这一点。
我想取两个整数列表(结果和设置)并按以下格式进行比较:
(Setting# - 0.1) <= Result# <= (Setting# +0.1)
我需要为列表中的所有#做这个。
例如,如果Result1=4.6
和Setting1=4.3
,我希望它比较4.2&lt; = 4.6&lt; = 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'
答案 0 :(得分: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'
答案 1 :(得分: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'
答案 2 :(得分:1)
并且几乎总是使用list和python,它可以在一行中完成:
print('ok' if all(setting - 0.1 <= result <= setting + 0.1
for setting, result in zip(settings, results)) else 'fail')
答案 3 :(得分: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]