Python: 序列list:保持元素顺序同时消除重复值
问题:怎样在Python的一个序列上面保持元素顺序的同时消除重复的值?
answer:如果序列上的值都是hashable 类型,那么可以很简单的利用集合或者生成器来解决这个问题。
eg1:
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
下面是使用上述函数的例子:
>>> a = [1, 5, 2, 1, 9, 1, 5, 10]
>>> list(dedupe(a))
[1, 5, 2, 9, 10]
eg2:
这个方法仅仅在序列中元素为hashable 的时候才管用。
如果你想消除元素不可哈希(比如dict 类型) 的序列中重复元素的话,你需要将上述代码稍微改变一下,就像这样:
def dedupe(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
这里的key 参数指定了一个函数,将序列元素转换成hashable 类型。下面是它的
用法示例:
>>> a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
>>> list(dedupe(a, key=lambda d: (d['x'],d['y'])))
[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 2, 'y': 4}]
>>> list(dedupe(a, key=lambda d: d['x']))
[{'x': 1, 'y': 2}, {'x': 2, 'y': 4}]
如果你想基于单个字段、属性或者某个更大的数据结构来消除重复元素,第二种方案同样可以胜任。
附:
hash是什么意思?
Hash,一般翻译成‘散列’,也有直译成‘哈希’的,把任意长度的输入通过散列算法,变成固定长度的输出。该输出就是散列值。
这种转换是一种压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。
简单的说是将一种任意长度的消息压缩到某一固定长度的消息摘要的函数。
HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位编码里,叫做HASH值。
也就是说hash就是找到一种数据内容和数据存放地址之间的映射关系
著名的hash算法,MD5和SHA1是目前应用最广泛的Hash算法,他们都是以MD4为基础设计的
相关文章
- 二级Python选择题_二级python选择题题库
- pycharm导入Python_python简单项目
- python识别文字位置_如何利用Python识别图片中的文字
- python jieba库_Python jieba库的使用说明「建议收藏」
- Python入门系列(十)一篇学会python文件处理
- 简述python变量的命名规则_Python 变量命名规则
- Python基本数据类型
- python 函数def
- python 查tensorflow版本_如何查看tensorflow的版本「建议收藏」
- Jenkins(3)拉取git仓库代码,执行python自动化脚本[通俗易懂]
- Python:过滤序列的filter()函数
- pycharm linux激活码_ubuntu python安装
- Python的基础知识_python的基本知识点
- Python学习(九)Python缩进规则[通俗易懂]
- python type error是什么意思_Python 报错 TypeError:’DoesNotExist’对象不可调用
- 纯 Python 实现的图片压缩工具
- 用Python爬猫眼影院信息的详细教程
- python-Python与PostgreSQL数据库-使用Python执行PostgreSQL查询(二)
- Python __dir__()用法:列出对象的所有属性(方法)名
- python让图片按照exif信息里的创建时间进行排序详解编程语言
- python常见释疑(有别于报错)(不定时更新)详解编程语言
- 使用Python编程连接MySQL数据库(python连mysql)
- 使用Python连接MySQL数据库,实现高效数据交互(python连接mysql)
- python笔记(1)关于我们应不应该继续学习python
- python字符串加密解密的三种方法分享(base64win32com)
- 跟老齐学Python之编写类之二方法
- Python序列之list和tuple常用方法以及注意事项
- python字符串连接方式汇总
- 实例讲解Python中的私有属性