Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表理解删除重复项_Python_Django - Fatal编程技术网

Python列表理解删除重复项

Python列表理解删除重复项,python,django,Python,Django,我希望在hubcode\u列表中有唯一的元素。我可以自己做 hubcode_alarm_obj = HubAlarm.objects.all() for obj in hubcode_alarm_obj: hubcode = obj.hubcode if hubcode not in hubcode_list: hubcode_list.append(hubcode) 我想使用列表理解。我正在尝试,但它说hubcode\u list未定义,这是正确的错误。如何仅

我希望在
hubcode\u列表中有唯一的元素
。我可以自己做

hubcode_alarm_obj = HubAlarm.objects.all()
for obj in hubcode_alarm_obj:
    hubcode = obj.hubcode
    if hubcode not in hubcode_list:
        hubcode_list.append(hubcode)
我想使用列表理解。我正在尝试,但它说
hubcode\u list
未定义,这是正确的错误。如何仅在
hubcode\u列表中添加唯一元素

hubcode_alarm_obj = HubAlarm.objects.all()
hubcode_list = [obj.hubcode for obj in hubcode_alarm_obj if obj.hubcode not in hubcode_list]
我也可以通过以下方式实现:-

hubcode_list = list(set([obj.hubcode for obj in hubcode_alarm_obj]))

但set又是另一种操作。我可以在列表理解中使用
if语句
吗?

您的答案是否。列表理解一次创建一个全新的列表,因此您无法检查是否存在某些内容:

>>> lst = [1, 2, 2, 4, 5, 5, 5, 6, 7, 7, 3, 3, 4]
>>> new = [item for item in lst if item not in new]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'new' is not defined
>>> 
但是,在列表列表中,这不起作用:

>>> lst = [[1, 2], [1, 2], [3, 5], [6, 7]]
>>> list(set(lst))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> 
>lst=[[1,2]、[1,2]、[3,5]、[6,7]]
>>>列表(集合(lst))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:不可损坏的类型:“列表”
>>> 

在这种情况下,使用标准的
for
循环和
.append()。这将是(到目前为止)最快的选择:

objects = HubAlarm.objects.exclude(hubcode__in=hubcode_list)

有关更多信息,请参阅。

简短回答:否。长篇回答:是的,在老python版本中,使用了令人厌恶的黑客攻击。你应该用一个
集合来做这件事
——即使这是第二个“操作”,它也会比建议的列表理解更快。所以你更喜欢
集合
方法?是否使用了一个选项?哦,是的。。。我也可以使用distinct。好建议。谢谢+谢谢你的建议。另一方面,我可以一次性更新所有过滤结果的列。现在我确实喜欢这个<代码>提醒\u obj=hubalm.objects.filter(a=b)在提醒中为obj设置提醒\u obj:obj.repeat='False'obj.save()
谢谢。我还有一个问题。我可以一次更新所有筛选结果的列吗。现在我确实喜欢这个<代码>提醒\u obj=HubAlarm.objects.filter(a=b)用于提醒中的对象\u obj:obj.repeat='False'obj.save()
确定,请参阅。
objects = HubAlarm.objects.exclude(hubcode__in=hubcode_list)