2016-06-27 1 views
1

В настоящее время я просто использовать что-то вроде этого:Есть ли более эффективный способ сравнения нескольких значений float в инструкции If в python?

def match9(a,b,c,d,e,f,g,h,i): 
if a==b and b==c and c==d and d==e and e==f and f==g and g==h and h==i: 
    return 1 
else: 
    return 0 

в сочетании с

temp = match9(d1s1,d1s2,d1s3,d1s4,d1s5,d1s6,d1s7,d1s8,d1s9) 
if temp == 1: 
    codeToBeActivated() 
+0

Более эффективный с точки зрения чего? Время? Космос? Или код? – sberry

+5

Вы не должны использовать '==' для сравнения 'float' в первую очередь. – chepner

+1

Ну, похоже, что вы хотите проверить, равны ли все элементы, поэтому вы просто 'set()', чтобы сохранить уникальные элементы и подсчитать длину результата. – Kasramvd

ответ

4

Вы можете использовать ярлык

if a == b == c == d == e == f == g == h == i: 

или использовать set для ликвидированных дублей, а затем проверить длина:

if len({a,b,c,d,e,f,g,h,i}) == 1: 

Это указано, используя == для сравнения float s может привести к ошибкам из-за точности с плавающей запятой. Вы можете попробовать проверить различия между элементами. Вот пример для Python> = 3.4:

from statistics import stdev 
if stdev([a, b, c, d, e, f, g, h, i]) < 1e-6: # Or some other threshold 
+0

трюк с множеством, вероятно, проверяет и на равенство, это проблема с поплавками, особенно когда они происходят из разных источников. –

Смежные вопросы