首页 > 解决方案 > 为什么它不给我空集?

问题描述

我有以下代码:

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 的一个元素。

我应该修复什么?

标签: python-3.xlistloopsfor-loopreverse

解决方案


您应该小心内置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()它将返回一个迭代器对象,并且它的评估结果为Falseif 检查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)
[]

推荐阅读