今天在写课堂签到时遇到了一个问题,签到是很容易的,在数据库中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:24
©允许规范转载
Python版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.yangyingqi.com/39.html