列表中重复元素计数和删除——思路及代码

今天的学习进度:致看完了《python编程快速上手》第一部分,后三章还没有上机,没有做题,今天的任务完成这些上机。

今天看公众号推送的一道python笔试题:给出一个列表,如何统计重复元素并删除重复元素创建新的列表。

这个题有很多解,而且题目实用性也很强,于是整理了一些前辈的分享和自己的思路,汇总如下:

=================================进入正题=====================================

假设列表为list=[9,9,2,3,2,3,2,3,4,4]

一、删除重复元素有那些方法?

列表遍历、集合无序、字典中键无序

1、用列表遍历的方法:

list=[9,9,2,3,2,3,2,3,4,4]
newlist=[]       #空列表
for i in list:  #空列表里没有才依次加入,这样加过的就不在这个if条件下了,就不会重复加,也就达到了去重
    if i not in newlist:
        newlist.append(i)
print(newlist)

2、用集合的方法:

list1=[9,9,2,3,2,3,2,3,4,4]
newlist=list(set(list1))
print(newlist)

3、字典fromkey()

list1=[9,9,2,3,2,3,2,3,4,4]
newdic={}.fromkeys(list1).keys() #这里不太懂为什么这么写???
newlist=list(newdic)
print(newlist)

二、重复元素计数有那些方法?

count和引入counter模块

import collections
countdic=collections.Counter([9,9,2,3,2,3,2,3,4,4]) #注意Counter首字母大写
print(countdic)

(关于counter模块详细解释

http://www.pythoner.com/205.html和https://blog.csdn.net/u013628152/article/details/43198605

更多方法详见:https://blog.csdn.net/weixin_40604987/article/details/79292493

三、形成代码

1、列表遍历+Counter

list=[9,9,2,3,2,3,2,3,4,4]
newlist=[]
for i in list:
    if i not in newlist:
        newlist.append(i)
print(newlist)
import collections
countdic=collections.Counter([9,9,2,3,2,3,2,3,4,4])
print(countdic)
列表中重复元素计数和删除——思路及代码_第1张图片

2、用set集合+count

list1=[9,9,2,3,2,3,2,3,4,4]
newlist=list(set(list1))
print(newlist)
for i in newlist:
print('%d出现了%d次!'%(i,list1.count(i))) #注意%格式化前后内容中间不加逗号,就是用%间隔,这里容易错

列表中重复元素计数和删除——思路及代码_第2张图片

3、fromkey()+count

list1=[9,9,2,3,2,3,2,3,4,4]
newdic={}.fromkeys(list1).keys()
newlist=list(newdic)
print(newlist)
for i in newlist:
print('%d出现了%d次!'%(i,list1.count(i)))

列表中重复元素计数和删除——思路及代码_第3张图片

~四、补充排序~

综合以上方法可以发现set+count是又快又好。但是set+count有个缺点,因为集合是无序的,导致会不再遵从原来列表的排序,那么如何使原来的排序保持不变呢?我们补充下排序的知识

https://docs.python.org/3.5/howto/sorting.html

list1=[9,9,2,3,2,3,2,3,4,4]
#newlist=list(set(list1)) #此时列表无序,我们修改为按照原来下标顺序排序的新列表
newlist=sorted(set(list1),key=list1.index)
print(newlist)
for i in newlist:
print('%d出现了%d次!'%(i,list1.count(i)))

或者

list1=[9,9,2,3,2,3,2,3,4,4]
newlist=list(set(list1)) #此时列表无序,我们修改为按照原来下标顺序排序的新列表
newlist.sort(key=list1.index)
print(newlist)
for i in newlist:
print('%d出现了%d次!'%(i,list1.count(i)))










你可能感兴趣的:(python)