Есть ли в python функция, которая возвращает true, если все члены итерируемого являются true?
Я пытаюсь изучить различные способы делать простые вещи в Python, а также немного узнать о некоторых функциональных практиках. У меня есть некоторые цифры, которые пользователь вводит, и я хочу знать, действительно ли они являются числами. Я придумал такое классическое решение:
def foo(list_of_inputs):
for n in list_of_inputs:
if not hasattr(n, "real"):
# some number is not a number!
return False
# all are numbers
return True
Но потом я выяснил эту другую "вещь", которая может иметь некоторый потенциал:
def foo(list_of_inputs):
bool_list = map(lambda input: hasattr(input, "real"), list_of_inputs)
return reduce(lambda x, y: x == y, bool_list)
Я думаю, что, возможно, функция, которая возвращает "True", если все члены коллекции, итерируемые, или что-то другое, правильное понятие, которое я ищу, являются "True", может уже быть чем-то общим, а также, эта вторая попытка не не возвращается, когда "Ложь" найдена, а классическая -... Но я нахожу это элегантным, и, возможно, это потому, что я еще не занимаюсь программированием в целом.
Итак, мой вопрос: каков "лучший" способ сделать это?
2 ответа
Как уже упоминалось, all
Функция будет делать то, что вы хотите. То, что вы описываете, вы пытаетесь сделать, также может быть сделано с помощью str.isnumeric()
функция.
def foo(listOfInputs):
return all(map(str.isnumeric,listOfInputs))
Редактировать: я считаю, что это не на ['1','2','3.14','4']
что немного раздражает. Может быть, кто-то может придумать более умное решение, чем это, но я решил обернуть слегка измененный подход в try
:
def foo(listOfInputs):
try:
return all(map(float,listOfInputs))
except ValueError:
return False
Это работает на:
['1','2','-3','4']
['1','2','3.14','4']
Вы имеете в виду что-то вроде встроенного all
функционировать?
Верните True, если все элементы итерируемого являются истинными (или если итерируемое пусто). Эквивалентно: