【问题标题】:IF statement not working with list differenceIF 语句不适用于列表差异
【发布时间】:2019-07-29 08:37:00
【问题描述】:

尝试使用以下代码获取两个列表之间差异的结果,但似乎不起作用。

list1 = ['one', 'two', 'three']
list2 = ['one', 'two', 'three', 'four']


list3 = list(set(list1) - set(list2))

if not list3: #if not empty, print list3
  print(list3)
else: # if empty print none
  print("None")

【问题讨论】:

  • list3 为空。由于您从list1 中的元素中删除了list2 中的所有元素。请注意,(-) 不是可交换的“集差”运算符。

标签: python django list


【解决方案1】:

在您的代码示例中,list3 确实为空,因为 list1 中的所有元素也都在 list2 中。

如果您要查找的列表包含list1 中不在list2 中的元素以及在list2 中但不在list1 中的元素,您应该使用对称集此处的区别,这可以使用 ^ 运算符来执行,例如:

list1 = ['one', 'two', 'three']
list2 = ['one', 'two', 'three', 'four']

list3 = list(set(list1) ^ set(list2))

另一方面,如果您要在 list2 中查找不在 list1 中的元素,则应交换操作数:

list1 = ['one', 'two', 'three']
list2 = ['one', 'two', 'three', 'four']

list3 = list(set(list2) - set(list1))

如果您使用-,您将获得set difference [wiki](或补码),如下所示:

A ∖ B = { a∈一个 |一∉乙}

symmetrical set difference [wiki](或分离联合)是:

A ⊕ B = (A ∖ B) ∪ (B ∖ A)

注意:注意非空列表的真实性为True,空列表的真实性为False。因此,您可能应该将您的打印逻辑重写为:

if list3:  # not empty
  print(list3)
else: # is empty
  print("None")

【讨论】:

  • 我实际上是在寻找集合差异,( - )运算符在 list3 中给了我正确的结果,因为 'four' 不在 list1 中,而当检查“IF”中的条件失败时,即如果列表是空的,否则应该被执行,而它不是
  • @Pradeep:那么你应该切换操作数。
  • @PradeeP;顺便说一句,您在 if 上犯了一个逻辑错误。如果列表为空,则列表是真实的。所以你想否定if中的条件。
【解决方案2】:

这是使用in的另一种方法

list1 = ['one', 'two', 'three']
list2 = ['one', 'two', 'three', 'four']

list3 = []
for value in list2:
    if value not in list1:
        list3.append(value)

print(list3)

# outputs ['four']

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2021-09-28
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多