Python找出列表的中只出现一次的元素

先看题目:
大致是找出a=[1,1,2,3,3,4,5,4,5]类似的列表中出现一次的元素>没错,就是2了。

1.先讲讲思路

2.源代码

3.这里面学习到的知识

1.思路1是这样的,我遍历原列表。每次都计算此刻的元素在列表中出现的次数(a.count('')).当返回值是1时,结束。但是我发现这样的时间复杂度是O(n),的确,后面提交的时候也超时了。

思路2.利用Counter(X).most_common(n)函数,会直接返回从高频率出现的(频率,元素)到低频率的列表。这样我们只需要取最后那个就行了。但是我还是觉得有点浪费了,毕竟我只需要最后的一个信息。

2.源码:

from collections import Counter  
zs = int(input())  
for i in range(zs):  
    a = int(input())  # 这个牌组的个数  
    b = input().split()  # 具体剩下的牌  
    c = Counter(b).most_common(a)  # 次数排在前n的数c d e  
    d = list(c[-1])[0]  
    print("Case #%d:"%(i+1),d)  

3.看了同学们的思路:

同学1:先排个序,变成[2,2,3,4,4,5,5]的样子;再去循环判断第一个元素与第二个是不是相等?

评价:仅仅对本题来说,思路很好。但是还是有点费时。

同学2: nums = [int(j) for j in input().split()]  这串代码,让我学会体面的讲字符的表格一行转换成int形的。

另外:在导入Counter的情况下:Counter(nums)可以以字典的形式返回这个列表的频率键值对。注:若字典前还有Counter,为了单纯字典化,可以dict(Counter(nums)).要知道,字典映射是极快的。比列表好太多。

同学3:set(),在把列表元素往集合里面添 new__contains__(x): 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值