[英]List comprehension with multiple if-conditions
I want to write the following bit of code in a pythonic way but having trouble at the moment:我想以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)
I got to:我必须:
np.mean([max(x*y for y in Y if x*y>8) for x in X])
but it's giving me ValueError: max() arg is an empty sequence
because for X[0]
, aa = []
.但它给了我ValueError: max() arg is an empty sequence
因为对于X[0]
, aa = []
。 Essentially, there needs to be check for an empty list before doing the max, there but I don't know how to include that.本质上,在做最大值之前需要检查一个空列表,但我不知道如何包含它。 Any help is appreciated.任何帮助表示赞赏。
What you are specifically asking can be done like this:您具体要求的内容可以这样完成:
>>> 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
But it's quite long, rather:但它很长,而是:
>>> np.nanmean([max([x*y for y in Y if x*y>8], default=np.nan) for x in X])
27.0
However, both are ugly.然而,两者都很丑。 Following would be cleaner:以下会更干净:
>>> mul = np.multiply(np.array(X)[:,None], Y).max(1)
>>> np.mean(mul[mul > 8])
27.0
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.