python - 在保留重复项的同时减去两个列表
问题描述
我有两个列表,我想从另一个列表中减去一个。
我见过有人使用集合,但我的列表包含重复项,所以我相信这不是我的选择。
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 中的任何元素,但我觉得应该有更简单的方法。任何帮助表示赞赏
解决方案
有一种 hack-ey 方法可以做到这一点,也可以保留顺序:
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 or new_list.remove(item)]
# final_list == [(1, 1), (-1, 210)]
这确保我们不会从int_list
. 如果也new_list
包含重复项,它也应该工作。请注意,它会发生变异new_list
,因此如果需要,请事先制作一份副本。
推荐阅读
- blazor - Blazor 等效于 @Url.Action 或 @Html.ActionLink
- kotlin - 替换对象 ArrayList 中的元素 [Kotlin]
- scala - 在scala枚举中覆盖toString
- c# - 如何修改组合框的选定文本?
- powershell - 循环文件以运行 PowerShell 脚本
- powershell - 使用不同的命名参数链接 powershell 脚本
- powershell - 将 ValidateSet() 与对象类型一起使用
- python - 在类中转换 pandas 列类型
- matlab - 当我采用 FFT sinc(t) 时有不同的结果
- python-3.x - Python 无法从内置轮子中导入子模块