我有一个列表:
[2, 5, True, 1, 0, 4, False, False, True]
如何使1和0分别显示为1和0,而不是True和False?我正在尝试:
[True if X == True else False for X in list]
期望的结果是:
[False, False, True, False, False, False, False, False, True]
答案 0 :(得分:1)
之所以会这样,是因为1和0分别是“真”和“假”。您可以使用is
来解决此问题,该方法对True和False使用基础单例:
[True if X is True else False for X in list]
编辑:如注释中所述,由于底层实现,在某种意义上说True为“ 1样”和False为“ 0样”实际上更正确。比真假更不上口!
答案 1 :(得分:1)
您可以添加类型检查:
[isinstance(X, bool) and X for X in list]
注意:类型检查应该放在第一位,以确保表达式始终为布尔值。
答案 2 :(得分:0)
您需要通过isinstance(X, bool)
所以您的代码将是这样
[True if X == True and isinstance(X, bool) else False for X in list]