简体   繁体   English

具有多个 if 条件的列表理解

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM