减去两个列表,同时保留重复项

乔南

我有两个列表,我想从另一个列表中减去一个。

我见过有人在使用集合,但是我的列表包含重复项,因此我认为这不是我的选择。

int_list = [(1,1), (-1, 210), (-1, 210)]
new_list = [(-1, 210)]

final_list = [item for item in int_list if item not in new_list]

我知道了final_list = [(1,1)],但是我想将的第二个副本保留(-1,210)在最终列表中。我知道为什么会这样,但是我不知道减去列表的另一种方法。我想我可以按原样返回最终列表,然后从int_list附加出现多次并且也出现在new_list中的任何元素,但是我觉得应该有一种更简单的方法。任何帮助表示赞赏

滑杆

您可以Counter为第一个列表创建一个,然后用第二个列表的a减去Counter然后,您可以使用剩余计数重新创建列表:

from collections import Counter
from itertools import chain

int_list = [(1,1), (-1, 210), (-1, 210)]
new_list = [(-1, 210)]

final_list_counts = Counter(int_list) - Counter(new_list)
final_list = list(chain(*[[t] * count for t, count in final_list_counts.items()]))
print(final_list)  # [(1, 1), (-1, 210)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章