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)