2014-11-23 2 views
0

Я сделал функцию, и мой результат список:логическое значение из списка

[3, 3, 3] 

Теперь нужно возвращать логическое значение. Если все элементы равны 2 или выше, мне нужно вернуть True, иначе мне нужно вернуть false. В этом случае это будет: Правда. (Потому что все элементы 3 и 3> 2) Есть ли какой-нибудь код, чтобы сделать это быстро?

Я попытался сделать FOR - петли, как:

for i in [3, 3, 3]: if i >= 2: return True else: return False 

Я думаю, что это правильно, но я хочу знать, если есть более быстрый способ.

благодарит заранее!

+2

Просьба показать свои усилия. – Maroun

+0

okej Я здесь новый. Это мой первый вопрос. В следующий раз я покажу свои усилия. Thx за советом. – Victor

ответ

4

Сделать generator (generator expression здесь), что дает булевы и передать его all function:

>>> all(x >= 2 for x in [3, 3, 3]) 
True 

Я вижу вас в курсе вашего кода, это не правильно, как он будет проверять только первый элемент списка. Вы можете это исправить:

for i in your_list: 
    if i < 2: 
     return False # Return early 
return True # if `i < 2` was False for all elements in the list, return True 
0
a= [3, 3, 3] 
b=[elem for elem in a if elem > 2] 
print (a==b) 

Выход: True

или в более сжатом виде

a= [3, 3, 3] 
print([elem for elem in a if elem > 2]==a) 

Выход: Правда

+0

Вопрос был о более быстром методе, а не медленнее и сложнее. – Daniel

0
def areGreaterEqualThen2(lst): 
    if lst: 
     return lst[0] >= 2 and areGreaterEqualThen2(lst[1:]) 
    return True 

Если вы должны определить вашей собственной функции.

Это также быстрое решение, потому что, если первое условие является ложным, весь возвращает false.

+0

Никогда не думал, что кто-то решит эту проблему рекурсивно в Python. – Daniel

+0

@ Daniel В последнее время я сделал много Haskell, так что это мышление застряло ко мне. – Alexandru

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