1. 首页
  2. 运维开发
  3. Python

Python去除列表list重复或相似元素的方法

最近博主在分析数据库慢查询日志的时候想使用python把重复或者相似的sql去掉,这样就不用看很多类似的sql了。重复相同的数据去掉比较简单,可以使用内置的set命令完成。

例如:

l1 = ['a','b','c','d','e','a','b','f'] 
l2 = list(set(l1)) 
print l2

这个用python很容易实现。

如何去除相似的字符串,即我这边用到的sql语句?好在python方便,有内置库difflib可以使用。difflib计算相似度的方法类似如下:

>>> import difflib
>>> difflib.SequenceMatcher(None, 'abcde', 'abcde').ratio()
1.0
>>> difflib.SequenceMatcher(None, 'abcde', 'zbcde').ratio()
0.80000000000000004
>>> difflib.SequenceMatcher(None, 'abcde', 'zyzzy').ratio()
0.0

有了这个方法,让博主我就先理下思路。

python-list-similar-remove

先从list的第一个元素开始,遍历该元素后的每个元素并比较。如果判断两个字符串相似,那么就把该元素删除。遍历完后就从第二个元素开始,依次循环,最终得到的就是去除相似元素后的列表了。

暂时博主想到就是这个办法,如果有效率更高更好的欢迎交流。代码类似如下:

def remove_similar(lists,similarity=0.9):
    i=0
    l=len(lists)
    while i<l:
        j=i+1
        while j<l:
            seq=difflib.SequenceMatcher(None,lists[i],lists[j])
            ratio=seq.ratio()
            if ratio>=similarity:
                del lists[j]
                l=l-1
            else:
                j+=1
        i+=1
    return lists

上面函数默认相似度设置的是0.9,可以按照你的要求修改。

试用后效果好像不错,原来几百条的sql就只剩几条了。。。

参考链接:

https://docs.python.org/2/library/difflib.html

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code