Python实现从序列中移除重复项且保持元素间顺序不变


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于Python实现从序列中移除重复项且保持元素间顺序不变,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、需求

我们想去除序列出现的重复元素,但仍然保持剩下的元素的顺序不变。

如果只是想要去重,那么通常足够简单的方法就是构建一个集合:

1

2

3

a=[1,5,4,36,7,8,2,3,5,7]

#结果为:{1, 2, 3, 4, 5, 36, 7, 8}

print(set(a))

2、解决方案

如果序列中的值是可哈希的(hashable),那么这个问题可以通过使用集合和生成器轻松解决。

如果一个对象是可哈希的,那么它的生存期内必须是不可变的,它需要有一个__hash__()方法。整数、浮点数、字符串、元素都是不可变的。

1

2

3

4

5

6

7

8

9

def dedupe(items):

    seen=set()

    for item in items:

        if item not in seen:

            yield item

            seen.add(item)

 

a=[1,2,3,1,9,1,5,10]

print(list(dedupe(a)))

运行结果:

1

[1, 2, 3, 9, 5, 10]

只有当序列中的元素是可哈希的时候才能这么做。如果想在不可哈希的对象序列中去除重复项,需要上述代码稍作修改:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

def dedupe(items,key=None):

    seen=set()

    for item in items:

        value=item if key is None else key(item)

        if value not in seen:

            yield item

            seen.add(value)

 

a=[

    {'x':1,'y':2},

    {'x':1,'y':3},

    {'x':1,'y':4},

    {'x':1,'y':2},

    {'x':1,'y':3},

    {'x':1,'y':1},

 

]

print(list(dedupe(a,key=lambda d:(d['x'],d['y']))))

 

print(list(dedupe(a,key=lambda d:d['y'])))

运行结果:

1

2

[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]

[{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 1, 'y': 4}, {'x': 1, 'y': 1}]

这里的参数key的作用是指定一个函数用来将序列中的元素转换为可哈希的类型,那么做的目的是为了检测重复项。

以上就是Python实现从序列中移除重复项且保持元素间顺序不变的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python安装完后怎么用

Python安装包里idle在哪

Python中格式化输出的两种方法介绍

Python输代码怎么换行?

spyder和Python有什么关系

Python数字类型有哪些

Python函数之callable(object)

Python如何与excel结合

Python中如何用django连接数据库(图文)

Python和c语言哪个简单

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...