【问题标题】:How do I minimize a list so there will only be only one of each element in python - in one line? [duplicate]如何最小化列表,以便在 python 中每个元素只有一个 - 在一行中? [复制]
【发布时间】:2021-10-16 20:07:57
【问题描述】:

我正在尝试编写一个函数,它将获取 2 个列表,找到它们之间的交点,并返回一个包含这些交点的新列表,并且新列表不会多次包含相同的元素。
例如:

交集([1,2,3,4], [8,3,9])
[3]

我尝试了以下方法:

print(list(filter(lambda x: x in list2, list1)))

事情是,如果这样做,例如:

交点([1,2,3,3,4], [8,3,9])

结果将是 [3,3]。

我怎样才能让在同一行代码中只有一个 3?

谢谢!

【问题讨论】:

    标签: python list list-comprehension


    【解决方案1】:

    为什么不使用 set 并将结果转换回列表如下:

    l = [1, 2, 3, 3, 4]
    l2 = [8, 3, 9]
    list(set(l).intersection(set(l2)))
    
    

    输出:

    [3]
    

    【讨论】:

    • 这行得通,但set.intersection(set(l), set(l2)) 有点误用;它是sets 的一个方法,通常被称为on a set。这仅适用于您明确地setify 第一个参数(如果您在实际的set 上调用它会得到self)。惯用的方法是set(l).intersection(l2)(不需要set-ify 方法的参数)或set(l) & set(l2)(操作员要求双方都是sets)。
    • 你完全正确!我已经更新了我的代码以准确显示这一点。谢谢!
    • 嘿,这行得通。但是,如果我理解正确的话,我似乎面临的另一个问题是集合出来的排序。例如,我通过: list1 = [5, 3] list2 = [5, 4, 3] 这将返回: [3. 5] 但我希望它返回:[5, 3],就像元素在列表中的顺序一样。有什么办法吗?谢谢!
    • 您可以尝试从 order_set 包中安装 OrderSet 库,它可以完全满足您的要求。 from ordered_set import OrderedSet list(OrderedSet(list1).intersection(list2)) 会产生 [5, 3] ordered-set
    • 这非常有效。非常感谢!
    【解决方案2】:

    尝试: list(set(intersection([1,2,3,3,4], [8,3,9])))

    【讨论】:

      【解决方案3】:

      使用set.intesection:

      def intersection(l1, l2):
          return list(set(l1).intersection(l2))
      
      intersection([1,2,3,4], [8,3,9])
      # [3]
      

      【讨论】:

        【解决方案4】:

        简单的方法是通过集合:

        L = [1,2,3]
        M = [4,2,2,3,3]
        
        inter = list( set(L).intersection(M) )
        

        【讨论】:

          【解决方案5】:

          如何获得一个 [3]

          x = list(set(filter(lambda x: x in [1,2,3,3,4], [8,3,3,9])))
          print(x)
          

          输出:

          [3]

          【讨论】:

            猜你喜欢
            • 2019-01-28
            • 2013-11-07
            • 1970-01-01
            • 1970-01-01
            • 2017-05-09
            • 2022-11-25
            • 2016-02-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多