Python 去除序列s中的重复元素
2011-09-26 23:34
369 查看
1.在可hash的情况下使用set,时间复杂度为 O(n)
2.不可hash,但支持比较使用sort,时间复杂度为 O(nlogn)
3.前两者都不能的情况下利用in判断,时间复杂度为 O(n**2)
关于是否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
return list(set(s))
2.不可hash,但支持比较使用sort,时间复杂度为 O(nlogn)
t=list(s) try: t.sort() except TypeError: del t else: return [x for i,x in enumerate(t) if not i or t[i]!=t[i-1]]
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
相关文章推荐
- Python 去除序列s中的重复元素
- python 列表(list)去除重复的元素总结
- Python合并字典键值并去除重复元素的实例
- Python去除list中重复的元素
- Python 去除列表中重复的元素
- python中使用set去除list中的重复元素
- 【Python】【List】去除列表中重复的元素
- 10.python中如何从一个序列中去除重复项
- python题目-----去除list中重复元素
- python中去除列表重复元素的方法汇总
- Python合并字典键值并去除重复元素的实例
- Python: 去除List中的重复元素
- Python 去除列表中重复的元素
- python列表去除重复元素
- python 数组重复元素去除
- python中去除列表重复元素的方法汇总
- Python 去除列表中重复的元素
- python 去除 list 重复元素
- 【python】实例-把两个无规则的序列连接成一个序列,并删除重复的元素,新序列按照升序排序
- 去除文件中的重复元素后写入文件 分类: python 小练习 open()文件读写 2013-12-03 11:21 356人阅读 评论(0) 收藏