簡體   English   中英

使用 any 進行簡單比較的更簡潔方法?

[英]cleaner way to do a simple comparison using any?

一些背景

我正在為用戶提交的代碼設置一些測試,以進行極其簡單的數據科學測試。

編碼“挑戰”在 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])完成這項工作,有沒有更有效/pythonic 的方式來表達這一點?

首先,列表是不必要的。 改用生成器表達式,這樣效率更高,因為它允許any / all短路

接下來, False if x == y else Truenot x == y相同,對於包括整數在內的大多數對象x != y

最后,由於德摩根定律,您可以使用all(...)而不是not any(not ...)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM