我想比較此列表中的所有項(xiàng)目: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)第一個(gè)為 true,因?yàn)榈谝粋€(gè)元素相同;第二個(gè)為 true,因?yàn)榈诙€(gè)值相同;第三個(gè)為 true,因?yàn)?為atrue。這些元組的比較應(yīng)該返回 true。所以我有這個(gè)代碼: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)對(duì)于 中的每個(gè)項(xiàng)目l,如果每次比較都返回 true,則將此元素附加到to_keep。問題是,由于某種神秘的原因,它總是評(píng)估為 true,因此所有元素都被添加到to_keep.[(True, False, True), (False, True, True), (False, False, True), (True, False, False), (False, False, False), (True, True, False), (False, True, False)]誰能解釋/糾正我的錯(cuò)誤?
1 回答

Smart貓小萌
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
該map函數(shù)生成一個(gè)可迭代對(duì)象,即使為空或充滿假值,它也是真實(shí)的:
>>> bool(map(bool, []))
True
>>> bool(map(bool, [False]))
True
因此,all(map(...) for ...)總是True。請(qǐng)注意,使用生成器表達(dá)式或(列表)理解對(duì)此無關(guān)緊要。
使用內(nèi)部all計(jì)算每個(gè)map,并使用外部all計(jì)算所有 s 的結(jié)果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) # []
添加回答
舉報(bào)
0/150
提交
取消