gpt4 book ai didi

python - 使用 set() 函数使用无限 *args 的自定义方法?

转载 作者:行者123 更新时间:2023-12-01 08:55:35 25 4
gpt4 key购买 nike

我正在开发一个项目,我们有很多这样的代码用法;

    # 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

关于python - 使用 set() 函数使用无限 *args 的自定义方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52795565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com