qingkuangs 发表于 2015-4-27 10:44:11

Python 去除序列s中的重复元素

  1.在可hash的情况下使用set,时间复杂度为 O(n)

return list(set(s))
  2.不可hash,但支持比较使用sort,时间复杂度为 O(nlogn)

t=list(s)
try:
t.sort()
except TypeError:
del t
else:
return !=t]
  3.前两者都不能的情况下利用in判断,时间复杂度为 O(n**2)

u=[]
for x in s:
if x not in u:
u.append(x)
return u
  关于是否hashable的一些注意事项:



[*]  如果一个对象拥有在其生命周期内不变的hash值(即有hash()方法),则其hashable,可变对象如list不可hash

[*]  可哈希对象拥有__eq__()和__cmp__()方法,相等的两个对象hash值也相等

[*]  字典的key和set中的元素必须是可hash的,因为数据结构内部使用其hash值

[*]  如果一个class没有定义cmp和eq方法的话,他是不能定义hash操作的;如果定义了前两个而未定义hash方法亦不能在需要hash的序列中使用其实例

[*]  一个可变的class是不能定义hash方法的,哪怕其定义了cmp和eq方法

[*]  用户自定义的class默认具有__cmp__()和__eq__()方法,其对象只有在跟自己比较时才相等,x.__hash__()返回id(x)

[*]  不可hash的class可显示定义 __hash__=None

页: [1]
查看完整版本: Python 去除序列s中的重复元素