亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

應用于元組的映射函數總是莫名其妙地計算為 True

應用于元組的映射函數總是莫名其妙地計算為 True

子衿沉夜 2023-10-11 21:14:27
我想比較此列表中的所有項目:l = [(True, False, True), (False, True, True), (False, False, True),     (True, False, False), (False, False, False), (True, True, False),     (False, True, False)]我想保留與所有其他元素相比始終滿足以下條件的所有元素:a 和 b 相同,或者a 為真例如:#      True, True,  Truea --> (True, False, True) b --> (True, False, False)第一個為 true,因為第一個元素相同;第二個為 true,因為第二個值相同;第三個為 true,因為 為atrue。這些元組的比較應該返回 true。所以我有這個代碼:to_keep = []for i in range(len(l)):    if all([map(lambda x, y: x == y or x, l[i], l[s]) for s in range(len(l))]):        to_keep.append(l[i])print(to_keep)對于 中的每個項目l,如果每次比較都返回 true,則將此元素附加到to_keep。問題是,由于某種神秘的原因,它總是評估為 true,因此所有元素都被添加到to_keep.[(True, False, True), (False, True, True), (False, False, True), (True, False, False), (False, False, False), (True, True, False), (False, True, False)]誰能解釋/糾正我的錯誤?
查看完整描述

1 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

該map函數生成一個可迭代對象,即使為空或充滿假值,它也是真實的:


>>> bool(map(bool, []))

True

>>> bool(map(bool, [False]))

True

因此,all(map(...) for ...)總是True。請注意,使用生成器表達式或(列表)理解對此無關緊要。


使用內部all計算每個map,并使用外部all計算所有 s 的結果all(map(...)):


to_keep = []


for i in range(len(l)):

    #  v for *all* tuples...

    if all(all(map(lambda x, y: x == y or x, l[i], l[s])) for s in range(len(l))):

        #  ^ for *all* elements of each tuple

        to_keep.append(l[i])


print(to_keep)  # []


查看完整回答
反對 回復 2023-10-11
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號