python 列表去重(数组)的几种方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 列表去重(数组)的几种方法相关的知识,希望对你有一定的参考价值。

参考技术A function
clear(arr)
//
1
如何获取数组中每一个元素出现的次数var
o
=
;
//
1.1
记录数组中元素出现的次数for
(var
i
=
0;
i
<
arr.length;
i++)
var
item
=
arr[i];
//
数组中的每一个元素//
o[item]
=
1;//
1.2
判断o对象是否有当前遍历到的属性if
(o[item])
//
如果o[item]
存在,说明次数不为1o[item]++;
else
//
如果o[item]
不存在,说明是第一次出现o[item]
=
1;//
console.log(o);
//
2
生成一个新的数组,存储不重复的元素var
newArray
=
[];//
2.1
遍历对象o中的所有属性for
(var
key
in
o)
//
2.2
判断o对象中当前属性的值是否为
1
如果为1
说明不重复直接放到新数组中if
(o[key]
===
1)
newArray.push(key);
else
//
o对象中当前属性
次数不为1
,说明有重复的,如果有重复的话,只存储一次//
判断当前的newArray数组中是否已经有该元素
if
(newArray.indexOf(key)
===
-1)
newArray.push(key);return
newArray;
var
array
=
['c',
'a',
'z',
'a',
'x',
'a'];var
newArray
=
clear(array);console.log(newArray);

数组去重的几种方法

JS数组去重的几种常见方法

JS数组去重的几种常见方法

一、简单的去重方法

// 最简单数组去重法
/*
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
* */
function uniq(array){
    var temp = []; //一个新的临时数组
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(array[i]) == -1){
            temp.push(array[i]);
        }
    }
    return temp;
}

var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));

二、对象键值法去重

/*
* 速度最快, 占空间最多(空间换时间)
*
* 该方法执行的速度比其他任何方法都快, 就是占用的内存大一些。
* 现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,
* 不是的话给对象新增该键并放入新数组。
* 注意点:判断是否为js对象键时,会自动对传入的键执行“toString()”,
* 不同的键可能会被误认为一样,例如n[val]-- n[1]、n["1"];
* 解决上述问题还是得调用“indexOf”。*/
function uniq(array){
    var temp = {}, r = [], len = array.length, val, type;
    for (var i = 0; i < len; i++) {
        val = array[i];
        type = typeof val;
        if (!temp[val]) {
            temp[val] = [type];
            r.push(val);
        } else if (temp[val].indexOf(type) < 0) {
            temp[val].push(type);
            r.push(val);
        }
    }
    return r;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

 

三、排序后相邻去除法

/*
* 给传入数组排序,排序后相同值相邻,
* 然后遍历时,新数组只加入不与前一值重复的值。
* 会打乱原来数组的顺序
* */
function uniq(array){
    array.sort();
    var temp=[array[0]];
    for(var i = 1; i < array.length; i++){
        if( array[i] !== temp[temp.length-1]){
            temp.push(array[i]);
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

 

四、数组下标法

/*
*
* 还是得调用“indexOf”性能跟方法1差不多,
* 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
* 那么表示第i项是重复的,忽略掉。否则存入结果数组。
* */
function uniq(array){
    var temp = [];
    for(var i = 0; i < array.length; i++) {
        //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
        if(array.indexOf(array[i]) == i){
            temp.push(array[i])
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));

 

五、优化遍历数组法

// 思路:获取没重复的最右一值放入新数组
/*
* 推荐的方法
*
* 方法的实现代码相当酷炫,
* 实现思路:获取没重复的最右一值放入新数组。
* (检测到有重复值时终止当前循环同时进入顶层循环的下一轮判断)*/
function uniq(array){
    var temp = [];
    var index = [];
    var l = array.length;
    for(var i = 0; i < l; i++) {
        for(var j = i + 1; j < l; j++){
            if (array[i] === array[j]){
                i++;
                j = i;
            }
        }
        temp.push(array[i]);
        index.push(i);
    }
    console.log(index);
    return temp;
}

var aa = [1,2,2,3,5,3,6,5];
console.log(uniq(aa));

 

以上是关于python 列表去重(数组)的几种方法的主要内容,如果未能解决你的问题,请参考以下文章

Python常用的几种去重方法

数组去重的几种方法

数组去重的几种常见方法?

JS数组去重的几种常见方法

整理数组去重的几种常用方法

Javascript数组去重的几种方法