我是编程的新手,我正在尝试从python中的列表中删除重复项。但是我无法使用set()执行它。列表包含IP地址和日期,以下是我的代码和列表
l = [['10.136.161.80', '2015-08-29'], ['10.136.161.80', '2015-08-29'], ['10.136.161.80', '2015-08-29'], ['10.136.161.80', '2015-08-29'], ['10.136.161.80', '2015-08-29'], ['10.136.161.80', '2015-08-29'],['10.136.161.235', '2016-03-12'], ['10.136.161.235', '2015-05-02'], ['10.136.161.93', '2016-03-12'], ['10.136.161.93', '2016-03-12'], ['10.136.161.93', '2015-04-25'], ['10.136.161.93', '2015-04-25'], ['10.136.161.93', '2016-03-12'], ['10.136.161.93', '2015-04-25'], ['10.136.161.93', '2015-04-25'], ['10.136.161.93', '2015-11-28'], ['10.136.161.93', '2015-11-28'], ['10.136.161.80', '2015-08-29'], ['10.136.161.112', '2015-04-25'], ['10.136.161.231', '2015-04-25']]
fl = set(l)
print fl
我收到以下错误:
Traceback (most recent call last):
File "C:/Users/syeam02.TANT-A01/PycharmProjects/security/cleandata.py", line 18, in <module>
fl = set(array)
TypeError: unhashable type: 'list'
提前致谢。
答案 0 :(得分:3)
您无法在list
中使用set
类型元素,因为list
是可变实体。出于同样的原因,您不能使用list
作为字典的键。您需要具有不可变类型,例如tuple
。
因此,您可以在传递给set:
之前将内部元素转换为元组set(tuple(li) for li in l)
尽管元组看起来与列表类似,但它们经常被用于 不同的情况和不同的目的。元组是不可变的, 并且通常包含异构的元素序列 通过解压缩(参见本节后面部分)或索引(或 即使是在namedtuples的情况下的属性)。列表是可变的,并且 它们的元素通常是同质的,可以通过迭代访问 在列表上。