python学习随笔:五种方法实现列表去重

编写Python代码实现删除一个list(列表)中的重复元素。

此题解法有很多种:
第一种:使用set函数:

a=[98,97,100,100,102,117,230,230,117,118,117,50]
s=set(a)
print(s)

运行结果是一个集合:

{97, 98, 100, 102, 230, 50, 117, 118}

第二种:使用append函数,建立一个新列表,在新列表中保存无重复元素

def delList(L):
    L1 = []
    for i in L:
        if i not in L1:
            L1.append(i)
    return L1    
print(delList([1,2,2,3,3,4,5]))
print(delList([1,8,8,3,9,3,3,3,3,3,6,3]))

运行结果为:

[1, 2, 3, 4, 5]
[1, 8, 3, 9, 6]

第三种:使用字典函数

   a=[1,2,4,2,4,5,6,5,7,8,9,0]
   b={}
   b=b.fromkeys(a)
   c=list(b.keys())
   print("b的值为:",b)
   print('去重后的list为:',c)

运行结果为:

b的值为: {1: None, 2: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 0: None}
去重后的list为: [1, 2, 4, 5, 6, 7, 8, 9, 0]

代码解释:
语法:dict.fromkeys(seq[, value])。
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
于此代码中,即是将列表中的值作为一个新建字典b中的key值,但由于字典的key不可以重复,所以相当于做了一个去重,然后再将新建字典的key值提取出来组成一个新列表c。
fromkeys的语法详见链接:https://www.runoob.com/python/att-dictionary-fromkeys.html
第四种:

a = [1, 2, 4, 2, 4, 5, 7, 10, 5, 5, 7, 8, 9, 0, 3]
a.sort()
print(a)

last = a[-1]
for i in range(len(a) - 2, -1, -1):
    if last == a[i]:
        del a[i]
    else:
        last = a[i]
print(a)

运行结果为:

[0, 1, 2, 2, 3, 4, 4, 5, 5, 5, 7, 7, 8, 9, 10]
[0, 1, 2, 3, 4, 5, 7, 8, 9, 10]

这其实就是用到了一个排序算法思想,先从最后一个数开始,然后逐个比较,如果有相同的元素,即舍去,最后得到了一个去重后的列表。

第五种:count.remove方法

def delList(list):
    for i in list:
        if list.count(i) != 1:
            for x in range((list.count(i) - 1)):
                list.remove(i)
    return list
print(delList([1, 2, 2, 3, 3, 4, 5]))
print(delList([1, 8, 8, 3, 9, 3, 3, 3, 3, 3, 6, 3]))

运行结果:

[1, 2, 3, 4, 5]
[1, 8, 9, 6, 3]

代码解释:
count语法:str.count(sub, start= 0,end=len(string))
Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
count语法详见链接:https://www.runoob.com/python/att-string-count.html
我们先遍历列表list,得到list列表中每一个元素出现的次数,如果次数不为一,即在这个列表中这个元素有重复项,那我们便使用循环丢弃重复项,最后得到一个去重的列表。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值