更干净的方式做一个简单的比较使用任何?

2024-06-12 04:17:39 发布

您现在位置:Python中文网/ 问答频道 /正文

一些背景

我正在为用户提交的代码设置一些测试,以进行一个非常简单的数据科学测试

在Jupyter Notepook中,编码“挑战”的结构如下:

li1 = [2,4,3,-2,-1,5,10]
li2 = [5,4,-3,7,8,-5,10,9]
def findMedian(li):
    li.sort()

    # find the median of li...
    # your code below

    listlength = len(li)
    num = listlength//2
    if listlength % 2 == 0:
        return (li[num]+li[num-1])/2
    else:
        return li[num]
if findMedian(li1) == 3:
    print("1 is correct!")
else:
    print("1 is wrong")
if findMedian(li2) == 6:
    print("2 is correct!")
else:
    print("2 is wrong")

现在,虽然这已经足够好了,但我决定我可能应该实现下面这样的东西来真正检查许多案例

from statistics import median
import random

x = [list(range(random.randint(1,50))) for i in range(1,100)]

print(not any([False if findMedian(i) == median(i) else True for i in x]))

问题是,使用not any()感觉不对,我已经做了一段时间了,我觉得我的知识有点差距

问题

有没有更简洁的方式来表达我的比较

not any([False if findMedian(i) == median(i) else True for i in x]) 工作中,是否有更有效的/类似于Python的方式来表达这一点


Tags: inforifisnotanylielse
1条回答
网友
1楼 · 发布于 2024-06-12 04:17:39

首先,清单是不必要的。改用generator expression,因为它允许^{}/^{} to short-circuit,所以效率更高

接下来,False if x == y else Truenot x == y相同,并且for most objects包括int,x != y

最后,多亏了De Morgan's laws,您可以使用all(...)而不是not any(not ...)

all(findMedian(i) == median(i) for i in x)

相关问题 更多 >