首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中两个具有重复项的列表之间的差异

Python中两个具有重复项的列表之间的差异
EN

Stack Overflow用户
提问于 2011-11-13 01:32:56
回答 6查看 14.9K关注 0票数 24

我有两个列表,其中包含许多相同的项目,包括重复的项目。我想检查第一个列表中的哪些项目不在第二个列表中。例如,我可能有一个这样的列表:

代码语言:javascript
运行
复制
l1 = ['a', 'b', 'c', 'b', 'c']

其中一个列表如下所示:

代码语言:javascript
运行
复制
l2 = ['a', 'b', 'c', 'b']

比较这两个列表,我想返回第三个列表,如下所示:

代码语言:javascript
运行
复制
l3 = ['c']

我现在使用的是我不久前写的一些糟糕的代码,我非常确定这些代码甚至不能正常工作,如下所示。

代码语言:javascript
运行
复制
def list_difference(l1,l2):
    for i in range(0, len(l1)):
        for j in range(0, len(l2)):
            if l1[i] == l1[j]:
                l1[i] = 'damn'
                l2[j] = 'damn'
    l3 = []
    for item in l1:
        if item!='damn':
            l3.append(item)
    return l3

我怎样才能更好地完成这项任务?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-13 01:37:43

您没有指定顺序是否重要。如果没有,你可以在>= Python2.7中做到这一点:

代码语言:javascript
运行
复制
l1 = ['a', 'b', 'c', 'b', 'c']
l2 = ['a', 'b', 'c', 'b']

from collections import Counter

c1 = Counter(l1)
c2 = Counter(l2)

diff = c1-c2
print list(diff.elements())
票数 44
EN

Stack Overflow用户

发布于 2011-11-13 01:39:55

为两个列表创建Counter,然后从另一个列表创建subtract

代码语言:javascript
运行
复制
from collections import Counter

a = [1,2,3,1,2]
b = [1,2,3,1]

c = Counter(a)
c.subtract(Counter(b))
票数 9
EN

Stack Overflow用户

发布于 2013-02-06 23:47:41

要同时考虑重复项和元素顺序,请执行以下操作:

代码语言:javascript
运行
复制
from collections import Counter

def list_difference(a, b):
    count = Counter(a) # count items in a
    count.subtract(b)  # subtract items that are in b
    diff = []
    for x in a:
        if count[x] > 0:
           count[x] -= 1
           diff.append(x)
    return diff

Example

代码语言:javascript
运行
复制
print(list_difference("z y z x v x y x u".split(), "x y z w z".split()))
# -> ['y', 'x', 'v', 'x', 'u']

Python 2.5版本:

代码语言:javascript
运行
复制
from collections import defaultdict 

def list_difference25(a, b):
    # count items in a
    count = defaultdict(int) # item -> number of occurrences
    for x in a:
        count[x] += 1

    # subtract items that are in b
    for x in b: 
        count[x] -= 1

    diff = []
    for x in a:
        if count[x] > 0:
           count[x] -= 1
           diff.append(x)
    return diff
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8106227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档