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): 

猜你喜欢

转载自blog.csdn.net/tommy1295/article/details/80636456