Python对列表去重的方法


2020年4月13日 22:25 阅读 802 评论 0 None

今天在写课堂签到时遇到了一个问题,签到是很容易的,在数据库中insert就可以了,但是要怎么获取未签到名单呢?

我刚开始是这样想的,给每个人一个签到标记,默认为False,签到后将其变为True,然后筛选就可以了,想法挺不错,但是我懒得动数据库。。。

然后我又想到了一个办法,比较已签到列表和总列表,将已签到列表中的数据在总列表里删除,这样剩下的不就是未签到列表了么

# 遍历获取未签到学生 
_sign_list = SignData.objects.all() 
sign_list = [] 
for stu in allData: 
    sign_list.append(str(stu)) # 因为学号是主键,所以直接str(),将学号添加至列表 
origin_list = [] 
all_stu_data = StuInfor.objects.all() 
for stu in all_stu_data: 
    origin_list.append(str(stu)) 
for stu in sign_list: 
    if stu in origin_list: # 如果这个学生在总列表里 
        origin_list.remove(stu) # 移除已签到学生 

如此一来origin_list里就剩下未签到学生的学号了,再遍历这个列表去获取学生信息就可以了

再放几个列表去重的方法

  • 利用set
originList = [1,2,3,1,5,1,3] 
# list()方法是把字符串str或元组转成列表 
formatList = list(set(orgList)) 
print(formatList) 
  • 使用keys()方法
originList = [1,2,3,1,5,1,3] 
# list()方法是把字符串str或元组转成列表 
formatList = list({}.fromkeys(orgList).keys()) 
print(formatList) 

上面两种方法的问题是:结果没有保持原来的顺序。

  • 循环遍历法
originList = [1,2,3,1,5,1,3] 
formatList = [] 
for i in originList: 
 if i not in formatList: 
  formatList.append(i) 
print(formatList) 
  • 按照索引原序排序
originList = [1,0,3,7,7,5] 
formatList = list(set(originList)) 
formatList.sort(key=originList.index) 
print(formatList) 

以上两种方法去重后是原序的

最后修改于2020年4月13日 22:25
©允许规范转载

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.yyqblog.com/article/39.html

微信
支付宝
登录后即可进行评论/回复