arr = [[2,6,8],[1,4,7],[3,3,4],[2,4,9],[3,3,7]]
array_analysis = lambda arr=[], evenOdd=True, no_doubles= True:list(i for i in arr if evenOdd == True len(set(i) % 2) if no_doubles == True len(set(i) !> 1)
# test it
print('test array', arr)
for evenOdd, no_doubles in ((True, True), (True, False), (False, True), (False, False)):
print(evenOdd, no_doubles, array_analysis(arr, evenOdd, no_doubles))
Я пытаюсь создать функцию лямбда, которая будет фильтровать список массивов на основе условных аргументов.Список фильтров с сложным выражением
Если все аргументы лямбды являются
True
, возвращаемое значение должно быть:[[1,4,7],[2,4,9]]
потому нет всех нечетных или все сглаживает не двойники в количестве не установлены.Если
no_doubles
-False
, то он должен включать в себя парные разряды, у которых нет всех четных или вообще не имеющих шансов. Возвращаемое значение должно быть[[1,4,7],[2,4,9],[3,3,4]]
не включает в себя набор[3,3,7]
, потому что все странно.Если
oddEven
isFalse
иno_double
является ложным, возвращаемым значением должно быть все номера наоборот. ЕслиoddEven
являетсяFalse
иno_double
являетсяTrue
, возвращаемое значение должно быть[[3,3,4],[3,3,7]]
без лямбда
# filters all odd or all even
def oddEven(a):
return [i for i in a if len(set(np.mod(i, 2)))!=2]
# filters doubles
def no_doubles(a):
return [i for i in a if len(set(i))!>2]
def all_filters_combined(a):
return oddEven(a) and no_doubles(a)
Это почти то, что я ищу, но его не используя лямбда и не позвольте мне выбрать, хочу ли я изменить фильтрацию. Как я могу изменить этот код, чтобы я мог выбрать фильтр в одной лямбда-функции?
Пожалуйста, правильно отформатируйте свой код, это нечитаемо и неоднозначно. – deceze
Во-первых, почему вы настаиваете на том, чтобы он был «лямбдой»? – bereal
Я потерял ... вы можете показать желаемый результат для всех четырех комбинаций evenOdd и no_doubles True и False? – elzell