美文网首页
列表去重中的copy问题

列表去重中的copy问题

作者: 隐墨留白 | 来源:发表于2019-01-04 17:52 被阅读0次

一般而言,列表去重无非那几种方法。
第一种,利用set()没有重复值的特性去重,简单,但是无序。
第二种,判断循环的元素是否在新列表中以此来去掉重复值,可以保持原来的顺序。
第三种,循环遍历,判断当前元素的个数是否大于1,然后在删除当前元素(需注意删除元素后列表的变化),无序。
今天主要说的就是第三种方法了。
示例代码:

list1 = [1,3,4,1,2,2,2,2,1,2]
for item in list1:
    print(item)
    # 统计元素的个数
    count = list1.count(item)
    # 如果个数大于1,就删一个
    if count > 1:
        list1.remove(item)
    print(list1)
#运行结果
1
[3, 4, 1, 2, 2, 2, 2, 1, 2]
4
[3, 4, 1, 2, 2, 2, 2, 1, 2]
1
[3, 4, 2, 2, 2, 2, 1, 2]
2
[3, 4, 2, 2, 2, 1, 2]
2
[3, 4, 2, 2, 1, 2]
2
[3, 4, 2, 1, 2]

Process finished with exit code 0

看最后结果,就知道这次去重失败了,是因为没有注意元素位置移动的问题。那请仔细看下面的代码有什么不同:

list1 = [1,3,4,1,2,2,2,2,1,2]
for item in list1.copy():
    print(item)
    count = list1.count(item)
    if count > 1:
        list1.remove(item)
    print(list1)

#运行结果
1
[3, 4, 1, 2, 2, 2, 2, 1, 2]
3
[3, 4, 1, 2, 2, 2, 2, 1, 2]
4
[3, 4, 1, 2, 2, 2, 2, 1, 2]
1
[3, 4, 2, 2, 2, 2, 1, 2]
2
[3, 4, 2, 2, 2, 1, 2]
2
[3, 4, 2, 2, 1, 2]
2
[3, 4, 2, 1, 2]
2
[3, 4, 1, 2]
1
[3, 4, 1, 2]
2
[3, 4, 1, 2]

Process finished with exit code 0

只是加了一个copy()方法,就避免了元素位置因为删除而移动的问题。copy()方法是浅拷贝,它将列表的值都拷贝了出来,且生成了一个新的空间存储值(copy()方法后新列表的id值和原来的列表id值不一样),所以下面的列表删除元素后元素的变动不影响拷贝后的列表值。详情请看

相关文章

  • 列表去重中的copy问题

    一般而言,列表去重无非那几种方法。第一种,利用set()没有重复值的特性去重,简单,但是无序。第二种,判断循环的元...

  • python 深拷贝和浅拷贝

    浅拷贝 深拷贝 列表嵌套列表 里面的引用也会开辟新的内存去存储 深拷贝里面的列表都被拷出来。 copy.copy ...

  • python列表去重保持顺序不变

    问题描述 一般使用 set() 方法对列表进行去重,列表中数据顺序会发生变化。 解决方法 # 原始列表数据 tes...

  • 2019-06-13 python种对列表里的字典进行去重

    python中列表去重的方法是set(),但是没有对列表里的字典进行去重的方法。只好自己写一个。

  • python列表浅拷贝

    列表的append方法以及copy模块的copy方法都是浅拷贝。即列表中的项内存地址都是相同的,如下代码。所以改变...

  • Python常用的几种去重方法

    一、对列表去重 case1:用集合的特性set(),去重后顺序会改变 case1.1:可以通过列表中索引(inde...

  • vue 中 去重方法 Element列表

    //去重方法 uniq(array){ array.sort(); v...

  • Python 列表去重

    1、去重不保持原来的顺序: 2、去重保持原顺序(reduce): 3、list元素是字典,去重

  • 列表排序/去重

    要求 1.正数在前负数在后2.整数从小到大3.负数从大到小 详解: 默认情况下内置的sort和sorted函数接收...

  • 列表去重的方法

    1、使用set的特性,python的set是一个无需的不重复的元素集(不保证书序) 2、使用keys()方法

网友评论

      本文标题:列表去重中的copy问题

      本文链接:https://www.haomeiwen.com/subject/smskrqtx.html