如何从字符串列表中删除一组单词?

3
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']

并且您还想删除 ** - The6thSense
1
你只想删除完全匹配的内容吗?你尝试过什么方法来实现这个功能吗? - Anand S Kumar
2
可能是获取两个列表的差异。Python的重复问题。 - Andrea Dusza
这是一个关于编程的问题,与http://stackoverflow.com/q/32241949/4014959有关。 - PM 2Ring
4个回答

4
您可以使用集合操作:
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']

根据我的看法,他也想要删除 ** - The6thSense
2
@VigneshKalai 这是一个SO的格式问题。我相信OP的代码中没有任何星号。 - JuniorCompressor

1
你可以使用 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**']

1

如果你想要:

  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']
>>> 

0
你可以这样做。遍历一个包含在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']

虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。 - Peter Brittain
这两行代码怎样才能更清晰明了呢?或许可以说它是“列表推导式”,这样那些不认识语法的人就可以查找相关信息了。但我第一次看到时,我的想法是“太棒了”,玩弄一下后,“功能与描述相符”。 - nigel222

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接