b = set([j-i for j in set([1,2,3,4,5]) for i in set() if j-i>=0])
print b
set()
爲什麼這個表達式返回一個空集,而不是返回set([1,2,3,4,5])
或引發錯誤的?
b = set([j-i for j in set([1,2,3,4,5]) for i in set() if j-i>=0])
print b
set()
爲什麼這個表達式返回一個空集,而不是返回set([1,2,3,4,5])
或引發錯誤的?
for i in set()
迭代零次,導致一個空集。
但是j還在迭代中嗎?那麼最小值不應該是j的值嗎? –
哪個值應該「我」擁有? – Daniel
@UkkarshAgrawal:'b'的每個元素必須對應一個'(i,j)'對,其中沒有。 「j」值是否存在並不重要,因爲沒有「i」值來匹配它們。 – user2357112
因爲您正在遍歷零個項目。展開的循環使得它更清晰:
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)
的代碼路徑add
到result
集永遠無法到達。
你在期待'set()'我做什麼? – user2357112
順便提一句,數學中類似的集合理解也可以被解釋爲一個空集合 - 這不僅僅是Python這樣做的事情。 – user2357112