python - 使用 set() 函数使用无限 *args 的自定义方法?
问题描述
我正在做一些项目,我们有很多这样的代码用法;
# filtering fields are different from each other, please ignore the similarity below
def function1(self, param):
list_x = Model1.objects.filter(foo=bar, bla=bla).values_list('field', flat=True)
list_y = Model2.objects.filter(foo=bar, bla=bla).values_list('field', flat=True)
lists_to_delete = set(list_x) - set(list_y)
# here is the code line with set() that needed to be method
self._delete(lists_to_delete)
def function2(self, param):
list_z = Model3.objects.filter(foo=bar, bla=bla).values_list('field', flat=True)
list_q = Model4.objects.filter(foo=bar, bla=bla).values_list('field', flat=True).distinct()
list_w = Model5.objects.filter(foo=bar, bla=bla).values_list('field', flat=True)
lists_to_delete = set(list_x) - set(list_y) - set(list_w)
# here is the code line with set() that needed to be method
self._delete(lists_to_delete)
... # other functions continues like above
...
...
所以,正如你所看到的,我们对set()
函数有相同的用法。我需要用自定义方法改变这种用法。我试图写一个这样的方法;
def _get_deleted_lists(self, *args):
value = set()
for arg in args:
value |= set(arg)
return value
用法会发生变化;
lists_to_delete = self._get_deleted_lists(list_x, list_y, ...)
而不是这个;
lists_to_delete = set(list_x) - set(list_y)
但是我的自定义方法返回的值与以前不同。我怎样才能做到这一点?
解决方案
|
对集合的操作返回它们的并集。你想要的是区别(-
)
def _get_deleted_lists(*lists):
if not lists:
return set()
result = set(lists[0])
for l in lists[1:]:
result -= set(l)
return result
推荐阅读
- java - 构建单词列表处理应用程序的初始版本
- html - 我无法添加 html 分隔线
- node.js - 在 Heroku 中使用 typeorm 时出现意外的令牌“导出”
- php - 语法错误或访问冲突:1140 GROUP 列的混合 (MIN(),MAX(),COUNT(),...)
- azure - 在 Azure 上托管 ClickOnce 的问题
- macros - notepad++ 如何将两个宏分配给同一个键?
- flutter - 更改特定行中 listView 中的图标
- kotlin - 如何启动接收器,获取“lateinit 属性 notificationManager 尚未初始化”
- php - 如何使用 PHP 强制下载 PDF 文件?
- python - 如何等待第二个下拉列表基于第一个在 Python 中使用 Selenium 加载