码迷,mamicode.com
首页 > 编程语言 > 详细

python含嵌套的列表去重问题

时间:2015-09-06 20:01:00      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

今天遇到一个问题,纠结一段时间后终于想到一个方法,挺开心的,就记录下。

问题简化之后是这样的:对于python中类似这样的一个列表

[{‘A‘:2,‘B‘:3,‘C‘:4},{‘A‘:2,‘B‘:4,‘C‘:5},{‘A‘:2,‘B‘:3,‘C‘:5},{‘A‘:2,‘B‘:3,‘C‘:6}]

其中列表的每个元素是有相同结构的字典,我想找出字典中A与B的组合是唯一的列表,C不同时选择最初的那个。

我希望得到的最后结果是这样的[{‘A‘:2,‘B‘:3,‘C‘:4},{‘A‘:2,‘B‘:4,‘C‘:5}]

如果是大家遇到这样的问题会怎么处理呢?

我的想法是先找到重复的列表号,然后再删除这些列表值。如上例中则先找到[2,3],不说太多,先把代码给上把。

del_id = [] 
for i in range(len(test_list)):
    j = i+1;
    while(j and j!=len(test_list)):
        if (test_list[j][A] == test_list[i][A]) and  (test_list[j][B] == test_list[i][B]):
            del_id.append(j)
            j = 0
        else:
            j = j+1
de = 0
for item in del_id:
    id_de = item - de
    del test_list[id_de]
    de += 1

上面代码挺简单的,主要是有两点一个是j从i+1开始比较,然后在遇到第一个满足重复的条件时停止,其实我也不知道这样是否能让运算量稍微小点。

因为一开始只是得出列表号,所以列表并没被改变,对于第三次出现的值我们会通过比较第二个重复值时找到列表号。

当时处理的列表长度貌似只是几万条,所以时间还好。

临时想的方案肯定有很多待完善处,如果有同学发现哪里错了或者有更好的办法也希望能告知下啦。

 

python含嵌套的列表去重问题

标签:

原文地址:http://www.cnblogs.com/fypp/p/4786957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!