lst = [1, 3, 2, 1, 3, True, False, True, "apple", "banana", "mango", "apple"]
lst2 = []
for i in range(0, len(lst)):
if lst[i] not in lst2:
lst2.append(lst[i])
print(lst2)
以上代码是去除重复值。但它也删除了 True
值。任何人向我解释为什么它不存储 True
值并告诉我正确的代码。
期望的输出:
[1,3,2, True, False, “apple”, “banana”, “mango”]
我得到的输出:
[1,3,2, False, “apple”, “banana”, “mango”]
任何人都可以帮我解决这个问题并向我解释背后的原因。请这真的很有帮助。
最佳答案
在 Python 中,True
被认为等同于 1
以进行相等性检查和数学运算,即使它们具有不同的类型(bool
与 int
).
如果你想比较它们的不同,一个解决方法可能是将每个值转换成一个元组及其类型(因为即使 1 == True
,(1, int ) != (True, bool)
) 用于比较,然后在完成后将它们转换回来:
>>> lst = [1, 3, 2, 1, 3, True, False, True, "apple", "banana", "mango", "apple"]
>>> for i in lst:
... if (i, type(i)) not in lst2:
... lst2.append((i, type(i)))
...
>>> lst2 = [i for i, _ in lst2]
>>> lst2
[1, 3, 2, True, False, 'apple', 'banana', 'mango']
如果您不关心顺序,您可以使用 set
更轻松地做到这一点:
>>> [i for i, _ in {(i, type(i)) for i in lst}]
[True, 2, 3, 'mango', False, 'banana', 1, 'apple']
或者如果你确实关心顺序但仍然想在理解中这样做,你可以用 dict
做一些小技巧(因为字典键是唯一的但不像它们保留的集合插入顺序):
>>> [i for i, _ in {(i, type(i)): None for i in lst}]
[1, 3, 2, True, False, 'apple', 'banana', 'mango']
关于python - 将列表中的真值与另一个列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72754477/