【问题标题】:How to remove list of words from a list of strings?如何从字符串列表中删除单词列表?
【发布时间】:2015-09-01 06:44:46
【问题描述】:
list1=['water', 'analog', 'resistance', 'color', 'strap','men', 'stainless', 'timepiece','brown','fast']

list2=['water resistant','water','red strap','digital and analog','analog', 'men', 'stainless steel']

所以输出将是

list=['water resistant','red strap','digital and analog','stainless steel']

【问题讨论】:

标签: python


【解决方案1】:

你可以使用集合操作:

list(set(list2) - set(list1))

可能的结果:

['red strap', 'digital and analog', 'stainless steel', 'water resistant']

如果您想保留订单,您可以执行以下操作:

s = set(list1)

[x for x in list2 if x not in s]

结果:

['water resistant', 'red strap', 'digital and analog', 'stainless steel']

【讨论】:

  • 在我看来他也想删除**
  • @VigneshKalai 这是 SO 的格式问题。我确定 OP 在他的代码中没有任何星星。
【解决方案2】:

您可以为此使用set。同样使用set,您不会有任何重复的项目。

这是 Python Shell 的输出

>>> set1 = set(list1)
>>> set2 = set(list2)
>>> set1
set(['brown', 'timepiece', 'color', 'stainless', 'men', 'resistance', 'fast', 'strap', 'water', 'analog'])
>>> set1-set2
set(['brown', 'timepiece', 'color', 'stainless', 'resistance', 'fast', 'strap'])
>>> set2-set1
set(['red strap', '**water resistant**', '**stainless steel**', '**digital and analog**'])
>>> for each in (set2-set1):
        print each

red strap
**water resistant**
**stainless steel**
**digital and analog**
>>> list3 = list(set2-set1)
>>> list3
['red strap', '**water resistant**', '**stainless steel**', '**digital and analog**']

【讨论】:

    【解决方案3】:

    如果你愿意

    1. List2 项目中删除 *
    2. 元素不在list1

    试试:

    >>> list = [x.replace('*', '') for x in list2 if x not in list1]
    >>> list
    ['water resistant', 'red strap', 'digital and analog', 'stainless steel']
    >>> 
    

    【讨论】:

      【解决方案4】:

      你可以这样做。遍历 list2 中的 list1 单词列表,然后使用迭代器删除单词。这不适用于重复的单词。

      >>> for s in [a for a in list1[:] if a in list2[:]]:
      ...    list2.remove(s)
      ... 
      >>> list2
      ['water resistant', 'red strap', 'digital and analog', 'stainless steel']
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      • 什么能让这两行代码更清晰?也许说这是一个“列表理解”,以便不认识语法的人可以查找它?但我第一次看到它时,我的想法是“棒极了”,在玩了一会儿之后,“就像它在罐头上说的那样”。
      猜你喜欢
      • 2011-03-31
      • 2011-02-02
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 2020-07-21
      相关资源
      最近更新 更多