我有两个列表,我想从另一个列表中减去一个。
我见过有人在使用集合,但是我的列表包含重复项,因此我认为这不是我的选择。
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] 删除。
我来说两句