概述
1.问题
我们想去除序列中重复出现元素,但仍然保持剩下的元素顺序不变。
2.解决方案
如果序列中的值是可哈希(hashable)的,那么这个问题可以通过使用集合和生成器轻松解决。示例如下:
def dedupe(items):
seen=set()
for item in items:
if item not in seen:
yield item
seen.add(item)
a=[1,2,1,5,9,10,5]
print(list(dedupe(a)))
只有当序列中的元素是可哈希的时候才可能这么做。如果想在不可哈希的对象(比如列表)序列中去除重复项,需要对上述代码稍作修改:
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的作用是指定一个函数用来将序列中的元素转换为可哈希的类型,这么做的目的是为了检测重复项。它可以像这样工作:
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)
a=[{'x':1,'y':2},{'x':1,'y':3},{'x':1,'y':2},{'x':2,'y':4}]
print(list(dedupe(a,key=lambda d:(d['x'],d['y']))))
print(list(dedupe(a,key=lambda d:d['x'])))
如果希望在一个较复杂的数据结构中,只根据对象的某个字段或属性来去除重复项,那么后一种解决方案同样能完美工作。
3.讨论
如果想要做的只是去除重复项,那么通常足够简单的方法就是构建一个集合。例如:
a=[1,5,2,9,1,1,5,10]
set(a)
但是这种方法不能保证元素间的顺序不变,因此得到的结果会被打乱。前面展示的解决方案可以避免出现这个问题。
最后
以上就是威武月饼为你收集整理的Python从序列中移除重复项目并且保持元素间顺序不变的全部内容,希望文章能够帮你解决Python从序列中移除重复项目并且保持元素间顺序不变所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复