繁体   English   中英

Python列表理解删除重复项

[英]Python list comprehension Remove duplicates

我想要hubcode_list唯一元素。 我可以做到

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_list是未定义的,这是正确的错误。 如何仅在hubcode_list添加唯一元素

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]))

但是置位还是另一项操作。 我可以通过在列表理解中使用if-statement来做到这一点吗?

由于您正在使用django,因此让数据库为您进行过滤。 (到目前为止)最快的选择:

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

有关更多信息,请参见文档

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

>>> 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
>>> 

因此,首选的单行代码是使用list(set(...))

>>> lst = [1, 2, 2, 4, 5, 5, 5, 6, 7, 7, 3, 3, 4]
>>> list(set(lst))
[1, 2, 3, 4, 5, 6, 7]
>>> 

但是,在列表列表中,这将不起作用:

>>> 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'
>>> 

在这种情况下,请将标准for loop和.append()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM