python-3.x - 为什么它不给我空集?
问题描述
我有以下代码:
a=[[2,3],[3,2]]
new=[i for i in a if i.reverse not in a]
print(new)
这给了我:
[[2,3],[3,2]]
但它应该给我一个空集,因为 [2,3] 的反面是 [3,2],它是集合 a 的一个元素。
我应该修复什么?
解决方案
您应该小心内置reverse()
属性,因为它会就地反转。根据您的用例,使用内置运算符可能会更好reversed()
。
>> a = [[2, 3], [3, 2]]
>> new = [i for i in a if reversed(i) not in a]
>> print(new)
[[2, 3], [3, 2]]
那是行不通的!这是因为reversed()
它将返回一个迭代器对象,并且它的评估结果为False
if 检查a
:
>> reversed([2, 3])
<list_reverseiterator at 0x1c1d9cd550>
>> reversed([2, 3]) in a
False
因此,您需要使用list()
来评估迭代器:
>> a = [[2, 3], [3, 2]]
>> new = [i for i in a if list(reversed(i)) not in a]
>> print(new)
[]
推荐阅读
- azure-active-directory - 如何在 Azure AD B2C 中预先创建联合 Azure AD (AAD) 用户?
- kotlin - 在分配时禁用换行符
- java - ITextRenderer 无法识别 xhtml 中定义的页面大小
- html - 是否可以通过 HelpNDoc API 使用 XML 和 HTML API 库?
- r - 连续字符值和时间大于指定间隔的情况
- parsing - 语法检查校对工具(插件、宏或你有什么)处理(一劳永逸)荷兰语 Word 文档中所谓的“dt-errors”
- mysql - 在 Sequelize(MySQL) 中,如何使用多个事务?
- python - 我将如何验证用户输入的密码与哈希密码表单数据库相同
- excel - 为什么保存共享文件时会创建重复的excel文件
- laravel - 我需要在 Laravel 中为数据库中已经存在的表创建迁移吗?