【问题标题】:python lists, delete content of list1 in list2 [duplicate]python列表,删除list2中list1的内容[重复]
【发布时间】:2020-10-15 17:45:13
【问题描述】:

我有两个列表

list1=['value1', 'value2', 'value3']
list2=['value1', 'value2', 'value3', 'value4', 'value5']

我想从list2中删除list1的内容

结果应该是:

['value4', 'value5']

【问题讨论】:

标签: python list


【解决方案1】:
list1=['value1', 'value2', 'value3']
list2=['value1', 'value2', 'value3', 'value4', 'value5']

set_list_1 = set(list1)
set_list_2 = set(list2)
print(list(set_list_2.difference(set_list_1)))
['value4', 'value5']

【讨论】:

    【解决方案2】:

    要打印 list2 中不在 list1 中的项目的值,可以使用以下代码:

    list1=['value1', 'value2', 'value3']
    list2=['value1', 'value2', 'value3', 'value4', 'value5']
    
    print([list2 for list2 in list2 if list2 not in list1])
    

    【讨论】:

    • 注意,这可行,但效率低。
    【解决方案3】:

    您可以通过将 list1 转换为 set,然后通过列表理解创建一个新列表,其中包含 list2 中不在 list1 中的项目

    list1=['value1', 'value2', 'value3']
    list2=['value1', 'value2', 'value3', 'value4', 'value5']
    list1_set = set(list1)
    result = [i for i in list2 if i not in list1_set]
    print(result)
    

    输出

    ['value4', 'value5']
    

    将 list1 转换为 set 是因为性能更好,因为检查项目是否在 set 中比在 list 中更快。

    【讨论】:

      【解决方案4】:

      list2 = [elem for elem in list2 if elem not in list1]

      【讨论】:

      • 从技术上讲,这不会从list2删除,而是用新列表覆盖变量。你可以例如使用list[:] = ... 替换list2 中的所有元素。此外,将list1 转换为set 可能会更快。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 2018-07-07
      • 2021-04-27
      • 2023-03-23
      • 2020-11-12
      相关资源
      最近更新 更多