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))
我试图创建一个lambda函数,它将根据条件参数过滤数组列表。你知道吗
如果所有lambda参数都是True
,那么返回值应该是:[[1,4,7],[2,4,9]]
,因为数字集中没有全奇数或全偶数,也没有双精度。
如果no_doubles
是False
,它应该包括没有全部偶数或没有全部赔率的双打。返回值应该是[[1,4,7],[2,4,9],[3,3,4]]
不包括集合[3,3,7]
,因为它都是奇数。
如果oddEven
为False
,no_double
为false,则返回值应为所有数字,反之亦然。如果oddEven
是False
,no_double
是True
,返回值应该是[[3,3,4],[3,3,7]]
没有lambda
# 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)
这几乎是我要找的,但它没有使用lambda,它不允许我选择,如果我想改变过滤。如何更改此代码以允许我在一个lambda函数中选择过滤器?你知道吗
我相信这正是你想要的。。。你知道吗
让我们把它分解一下。你知道吗
[ i for i in arr if ... ]
-您可以使用列表理解来执行这样的过滤。我们只需要确保...
根据元素正确地计算为True
或False
。你知道吗not (evenOdd and (all(k % 2 == 1 for k in i) or all(k%2 == 0 for k in i)))
-这是偶数检验。如果evenOdd
是False
,那么语句将对True
短路,这意味着不应该对元素进行过滤。如果evenOdd
是True
,那么all(k % 2 == 1 for k in i)
测试i
的每个元素是否为奇数(下一个测试检查偶数)。你知道吗and
-如果其中一个测试失败,则应过滤元素。你知道吗not (noDoubles and (len(i) != len(set(i))))
-如果noDoubles
是False
,则表达式对True
短路。如果noDoubles
是True
,那么len(i) != len(set(i)))
只是重复的脏测试。你知道吗相关问题 更多 >
编程相关推荐