我有两个嵌套列表,如下所示:
list_1 = [[4,9,2],[3,5,7],[8,1,5]]
list_2 = [[4,9,2],[3,5,7],[8,1,6]]我希望在这两个嵌套列表之间找到不同的值,以及它的不同之处。在上面的列表中,不同的值是5和6,所以区别是:-1(5-6)。注意,不会列出任何公共值。
我想把它存储在一个列表中,然后打印它的输出:
[-1]另一个例子是:
list_1 = [[3, 6, 7], [4, 9, 9], [7, 6, 9]]
list_2 = [[6, 7, 2], [1, 5, 9], [8, 3, 4]]输出应该如下:
[-3,-1,5,3,4,-1,3,5]如果它们都是常见的,则应该返回一个空列表:[]
发布于 2018-05-02 12:07:07
使用一个简单的列表-理解:
list_1 = [[3, 6, 7], [4, 9, 9], [7, 6, 9]]
list_2 = [[6, 7, 2], [1, 5, 9], [8, 3, 4]]
print([x-y for i in range(len(list_1)) for x, y in zip(list_1[i], list_2[i]) if x-y])
# [-3, -1, 5, 3, 4, -1, 3, 5]或者使用itertools.chain
from itertools import chain
list_1 = [[3, 6, 7], [4, 9, 9], [7, 6, 9]]
list_2 = [[6, 7, 2], [1, 5, 9], [8, 3, 4]]
print([x-y for x, y in zip(chain(*list_1), chain(*list_2)) if x-y])
# [-3, -1, 5, 3, 4, -1, 3, 5]发布于 2018-05-02 12:04:57
from itertools import chain
[l1-l2 for l1, l2 in zip(chain(*list_1),chain(*list_2)) if l1-l2]发布于 2018-05-02 12:06:19
作为一个纯函数式,但有点模糊,您可以使用itertools.starmap()和itertools.chain()加上zip和operator.sub。
In [165]: list(starmap(sub, chain.from_iterable(starmap(zip, zip(list_1, list_2)))))
Out[165]: [-3, -1, 5, 3, 4, 0, -1, 3, 5]另一种更容易理解的方法是使用flatten函数来平平嵌套列表,然后使用简单的列表理解和zip。
In [168]: def flatten(lst):
...: return [i for sub in lst for i in sub]
...:
In [169]: [i-j for i, j in zip(flatten(list_1), flatten(list_2))]
Out[169]: [-3, -1, 5, 3, 4, 0, -1, 3, 5]
# or starmap(sub, zip(flatten(list_1), flatten(list_2)))https://stackoverflow.com/questions/50134183
复制相似问题