2017-05-23 43 views
0
b = set([j-i for j in set([1,2,3,4,5]) for i in set() if j-i>=0]) 

print b 

輸出:操作與蟒蛇空集返回NULL設置

set() 

爲什麼這個表達式返回一個空集,而不是返回set([1,2,3,4,5])或引發錯誤的?

+1

你在期待'set()'我做什麼? – user2357112

+0

順便提一句,數學中類似的集合理解也可以被解釋爲一個空集合 - 這不僅僅是Python這樣做的事情。 – user2357112

回答

1

for i in set()迭代零次,導致一個空集。

+0

但是j還在迭代中嗎?那麼最小值不應該是j的值嗎? –

+0

哪個值應該「我」擁有? – Daniel

+0

@UkkarshAgrawal:'b'的每個元素必須對應一個'(i,j)'對,其中沒有。 「j」值是否存在並不重要,因爲沒有「i」值來匹配它們。 – user2357112

1

因爲您正在遍歷零個項目。展開的循環使得它更清晰:

result = set() 
for j in set([1,2,3,4,5]): 
    for i in set(): # <-- there are no i's ! 
     if j - i >= 0: 
      result.add(j - i) 

的代碼路徑addresult集永遠無法到達。