我想以pythonic的方式编写以下代码,但目前遇到了问题:
X = [1, 2, 3, 4, 5, 6, 7]
Y = [1, 4, 6, 2]
aa = []
max_a = []
for x in X:
for y in Y:
a = x*y
if a > 8 :
aa.append(a)
if aa != []:
max_a.append(max(aa))
aa = []
np.mean(max_a)
我得:
np.mean([max(x*y for y in Y if x*y>8) for x in X])
但它给了我ValueError: max() arg is an empty sequence
,因为对于X[0]
,aa = []
。本质上,在做max之前,需要检查一个空列表,但我不知道如何包含它。任何帮助都是非常感谢的。
发布于 2020-07-27 16:24:35
xs = [[x*y for y in Y if x*y > 8] for x in X]
xs = [max(x) for x in xs if x]
np.mean(xs)
发布于 2020-07-27 16:11:29
您特别询问的内容可以这样做:
>>> np.mean([max(x*y for y in Y if x*y>8) for x in X if any(x*y for y in Y if x*y>8)])
27.0
但它相当长,更确切地说:
>>> np.nanmean([max([x*y for y in Y if x*y>8], default=np.nan) for x in X])
27.0
然而,两者都很丑陋。下面的代码会更清晰:
>>> mul = np.multiply(np.array(X)[:,None], Y).max(1)
>>> np.mean(mul[mul > 8])
27.0
https://stackoverflow.com/questions/63118931
复制相似问题