如何在python中比较两个列表并返回不匹配

时间:2016-03-01 01:29:57

标签: python

我想从两个列表中返回不在另一个列表中的值:

bar = [ 1,2,3,4,5 ]
foo = [ 1,2,3,6 ]

returnNotMatches( a,b )

将返回

[[ 4,5 ],[ 6 ]]

5 个答案:

答案 0 :(得分:15)

只需使用列表理解:

data[2016][2]

答案 1 :(得分:3)

这应该

***node is not discoverable and some tNode riak@1**.**.**.**1 should be reachable.
Hints:
The Erlang node may have a different cookie from the one specified.
The Erlang node may have been registered addressing the host in a different way than specified.***

如果你不在乎结果应该是一个列表,你可以跳过最后一次投射。

答案 2 :(得分:3)

最简单,最快的方法之一是:

new_list = set(list1).difference(list2)

至于比赛是:

new_list = set(list1).difference(list2)

答案 3 :(得分:1)

我可能会依赖stdlib ......

from itertools import tee, izip
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

import difflib

def returnNotMatches(a, b):
    blocks = difflib.SequenceMatcher(a=a, b=b).get_matching_blocks()
    differences = []
    for b1, b2 in pairwise(blocks):
        d1 = a[b1.a + b1.size: b2.a]
        d2 = b[b1.b + b1.size: b2.b]
        differences.append((d1, d2))
    return differences

print returnNotMatches([ 1,2,3,4,5 ], [ 1,2,3,6 ])

打印:[([4, 5], [6])]

这将序列作为流进行比较,并找出流中的差异。它需要考虑顺序,等等。如果订单和重复项重要,那么sets是目前为止的方法(只要元素可以进行哈希处理)。

答案 4 :(得分:0)

您可以使用列表理解和压缩

''.join([i[0] for i in zip(a, a.lower()) if i[0] == i[1]])