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

标签 python list

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/

相关文章:

python - 使用部分日期时间索引连接数据框

python - 如何在 Dask 中执行时间导数而不排序

python - 将省略号放在seaborn catplot上

python - python 中不需要的列表分配行为

list - 为什么 Haskell 允许 Shape 列表,但不允许 Square 或 Circle 或 Triangle 列表

python - 使用 zip 和列表理解来创建字典

Python+解析自定义配置文件

python - 以矢量化方式将复杂列表转换为数据帧

python - 列出回调?

python - Sikuli 函数和运算符列表