【问题标题】:Python, finding unique words in multiple listsPython,在多个列表中查找唯一单词
【发布时间】:2016-04-09 21:43:18
【问题描述】:

我有以下代码:

 a= ['hello','how','are','hello','you']
 b= ['hello','how','you','today']
 len_b=len(b)

 for word in a:

      count=0
      while count < len_b:

           if word == b[count]:       
               a.remove(word)
               break

           else:
               count=count+1

 print a  

目标是它基本上输出(列表a的内容)-(列表b的内容) 所以在这种情况下想要的结果是 a = ['are','hello']

但是当我运行我的代码时,我得到 a= ['how','are','you']

谁能指出我的实现有什么问题,或者有没有更好的方法来解决这个问题?

【问题讨论】:

  • 在迭代列表时不要更改列表的长度。此外,除非订单相关,否则您可以只使用print set(a) - set(b)

标签: python string list loops sorting


【解决方案1】:

您可以使用set 来获取所有不重复的元素

所以你可以为不同的集合做set(a) - set(b)

【讨论】:

  • 这在一定程度上有效,因为它给了我在 a 中出现的任何单词,从不在 b 中,但我仍然没有得到我正在寻找的结果,它给了我 a= ['are '] 而不是 a = ['are','hello']
【解决方案2】:

这是因为您在迭代列表a 时对其进行了变异。

如果你想正确解决,可以试试下面的方法。它使用列表理解和字典来跟踪结果集中的单词数:

>>> a = ['hello','how','are','hello','you']
>>> b = ['hello','how','you','today']
>>> 
>>> cnt_a = {}
>>> for w in a:
...     cnt_a[w] = cnt_a.get(w, 0) + 1
... 
>>> for w in b:
...     if w in cnt_a:
...         cnt_a[w] -= 1
...         if cnt_a[w] == 0:
...             del cnt_a[w]
... 
>>> [y for k, v in cnt_a.items() for y in [k] * v]
['hello', 'are']

即使在结果列表中,它也适用于有重复项的情况。但是它可能不会保留顺序,但如果您愿意,可以轻松修改以执行此操作。

【讨论】:

  • 非常感谢您的帮助。顺序对我来说并不重要
【解决方案3】:

set(a+b) 也可以。您可以使用集合来获取独特的元素。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2018-08-01
    • 2013-10-21
    相关资源
    最近更新 更多