首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python列表减法运算

Python列表减法运算
EN

Stack Overflow用户
提问于 2010-08-07 07:43:12
回答 13查看 493.3K关注 0票数 303

我想做一些类似的事情:

代码语言:javascript
复制
>>> x = [1,2,3,4,5,6,7,8,9,0]  
>>> x  
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]  
>>> y = [1,3,5,7,9]  
>>> y  
[1, 3, 5, 7, 9]  
>>> y - x   # (should return [2,4,6,8,0])

但是python列表并不支持这一点,最好的方法是什么?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-08-07 08:19:08

使用列表理解:

代码语言:javascript
复制
[item for item in x if item not in y]

如果你想使用-中缀语法,你可以这样做:

代码语言:javascript
复制
class MyList(list):
    def __init__(self, *args):
        super(MyList, self).__init__(args)

    def __sub__(self, other):
        return self.__class__(*[item for item in self if item not in other])

然后,您可以像这样使用它:

代码语言:javascript
复制
x = MyList(1, 2, 3, 4)
y = MyList(2, 5, 2)
z = x - y   

但是,如果您不是绝对需要列表属性(例如,排序),则只需按照其他答案建议的方式使用集合。

票数 426
EN

Stack Overflow用户

发布于 2010-08-07 07:45:35

使用set difference

代码语言:javascript
复制
>>> z = list(set(x) - set(y))
>>> z
[0, 8, 2, 4, 6]

或者你可以只设置x和y,这样你就不需要做任何转换了。

票数 325
EN

Stack Overflow用户

发布于 2013-11-28 14:49:44

如果重复和排序项目有问题:

[i for i in a if not i in b or b.remove(i)]

代码语言:javascript
复制
a = [1,2,3,3,3,3,4]
b = [1,3]
result: [2, 3, 3, 3, 4]
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3428536

复制
相关文章

相似问题

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