gpt4 book ai didi

python - 将列表中的真值与另一个列表进行比较

转载 作者:行者123 更新时间:2023-12-05 02:28:08 25 4
gpt4 key购买 nike

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 以进行相等性检查和数学运算,即使它们具有不同的类型(boolint).

如果你想比较它们的不同,一个解决方法可能是将每个值转换成一个元组及其类型(因为即使 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com