如何在Python中减去两个二维列表?

-2 投票
4 回答
1373 浏览
提问于 2025-04-18 06:52

我需要像这样减去两个二维列表:

list1= [['some',2],['other',1],['thing',5]]

list2= [['some',1],['thing',5]]

结果应该像这样:

result= [['some',1],['other',1],['thing',0]]

或者

result= [['some',1],['other',1]]

结果应该是一个列表,而不是字典;顺序不重要。

4 个回答

-2

代码:

list1 = [['some',2], ['other',1], ['thing',5]]
list2 = [['some',1], ['thing',5]]

def list_substractor(l1, l2):
    d1 = dict(l1)
    d2 = dict(l2)

    for key, value in d1.items():
        if key in d2.keys():
            d1[key] = d1[key] - d2[key]

    for item in set( set(d2.keys()) - set(d1.keys())):
        d1[item] = -d2[item]

    return [[key, value] for key, value in d1.items()]

print list_substractor(list1, list2)
print list_substractor(list2, list1)

输出:

[['thing', 0], ['other', 1], ['some', 1]]
[['thing', 0], ['other', -1], ['some', -1]]
0

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个库或者框架的时候,发现它的功能和自己想要的效果不太一样。这种情况很常见,特别是对于刚入门的编程小白来说。

解决这些问题的一个好方法是查看相关的文档或者社区讨论,比如StackOverflow。在那里,很多开发者会分享他们的经验和解决方案,帮助大家更好地理解如何使用这些工具。

另外,遇到问题时,也可以尝试自己动手调试代码,看看哪里出了问题。通过实践,我们可以逐渐掌握编程的技巧和思路。

总之,编程是一条不断学习的道路,遇到困难时不要气馁,多向他人请教,积累经验,慢慢就会变得越来越熟练。

>>> d1, d2 = dict(list1), dict(list2)
>>> d = {key: d1[key] - d2.get(key, 0) for key in d1}
>>> d.items()
[('thing', 0), ('other', 1), ('some', 1)]
>>> map(list, d.items())
[['thing', 0], ['other', 1], ['some', 1]]
1

我明白了,大家是这样做的:

tmp=[[k,v] for k,v in (Counter(dict(list1)) - Counter(dict(list2))).items()]

谢谢你们的回答!

2

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有些人可能会在使用某个功能时,发现它并没有按照预期的方式工作。这时候,我们就需要去查找原因,看看是不是哪里出了问题。

有时候,问题可能出在我们对某些工具或语言的使用上。比如,如果我们在写代码的时候,没有注意到某些细节,或者没有按照正确的步骤去做,就可能导致错误的发生。

在这种情况下,最好的办法就是去查阅相关的资料,看看有没有人遇到过类似的问题,或者是有没有解决方案可以参考。StackOverflow就是一个很好的地方,大家可以在这里分享自己的经验和解决方案。

总之,遇到问题时,不要着急,先冷静下来,仔细分析一下,看看是不是哪里出了错,然后再去寻找解决办法。

from collections import Counter
list1= [['some',2],['other',1],['thing',5]]

list2= [['some',1],['thing',5]]
c1 = Counter({item[0]: item[1] for item in list1})
c2 = Counter({item[0]: item[1] for item in list2})
result = [[key, value] for key, value in (c1-c2).items()]

result
[['other', 1], ['some', 1]]

撰写回答