【问题标题】:Remove items in an array that are contained in other items [Python]删除数组中包含在其他项目中的项目 [Python]
【发布时间】:2020-07-21 10:19:13
【问题描述】:

我不确定标题是否很好地解释了我正在尝试做的事情,这里是一个例子:

Array = ['orangutan', 'sun', 'tan']

我要打印:

'orangutan', 'sun'

我尝试遍历数组并查看一项是否包含另一项,如下所示:

for i in Array:
remove_duplicates = [x for x in Array if x in i]

但这没有奏效。

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: python arrays python-3.x macos sorting


    【解决方案1】:

    这是一个可能的解决方案:

    result = [x
              for i, x in enumerate(Array)
              if all(x not in y for j, y in enumerate(Array) if i != j)]
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      lst = ['orangutan', 'sun', 'tan']
      
      print([x for i, x in enumerate(lst)
             if not any(x in y for j, y in enumerate(lst) if i != j)])
      

      更新:

      我已经得出与 Riccardo Bucco 基本相同的解决方案,这一点不容忽视。但是这里的测试是不同的。有关这两个测试的等效性,请参阅De Morgan's lawsany(即在布尔输入上减少 or)在 inverse 上给出 allinverse(即减少 and)这些输入——因此not any(... in ...) 等同于all(... not in ...)

      在任何一种情况下,迭代都将在第一个匹配时停止:all 将停止迭代并返回 False 如果它看到类似 false 的值,any 将停止迭代并返回 True 如果它看到一个类似真实的值。

      【讨论】:

      • 和我的回答一样:)
      • @RiccardoBucco 看起来我们俩都做了显而易见的事情(显然是独立的 - 他们相隔几秒钟)。但是我们的测试略有不同。我想知道将它们都放在一边是否有用?
      • @RiccardoBucco 他们是显而易见的选择。
      • @RiccardoBucco 添加了一些解释,说明为什么我认为将这两者并排查看是有用的。
      • 谢谢,太好了!!不要在anyall 中使用列表确实非常重要,这样迭代会在遇到False 值时立即停止。为有用的评论点赞!
      【解决方案3】:

      我假设您有另一个数组,其中包含要保留的字符串。 如果是这种情况,您可以循环使用 .pop():

      array=['orangutan', 'sun', 'tan']
      other_array=['orangutan', 'sun']
      for i in range(0,len(array)):
          if array[i] not in other_array:
              array.pop(i)
              
      print(array)
      

      array=['orangutan', '太阳']

      【讨论】:

      • 根据标题,我知道他所拥有的是他想要删除的列表 (other_array = ['tan']),因此您还需要删除条件中的 not。跨度>
      • 是的,在这种情况下,只需添加一点点零钱就可以了
      【解决方案4】:

      remove() 方法从列表中删除第一个匹配元素(作为参数传递)。

      【讨论】:

      • list.remove(element)
      • 请修改您的答案,而不是将其添加为评论
      【解决方案5】:

      我尝试遍历数组并查看一项是否包含另一项,如下所示。

      你快到了:

      list_ = []
      Array = ['orangutan', 'sun', 'tan']
      for i in Array:
          list_.extend([x for x in Array if x in i and x != i])
      print(list_)
      

      输出:

      ['tan']
      

      【讨论】:

        猜你喜欢
        • 2018-05-28
        • 2019-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-16
        • 2012-06-14
        • 1970-01-01
        • 2011-01-04
        • 2018-10-19
        相关资源
        最近更新 更多