求多个list的交集、并集、差集
list1 = [1,2,3,4,12]
list2 = [2,4,5,6,9,78]
list3 = [2,3,4,5,8,12,78]
1)求多个list的交集:
#list(set(list1).intersection(set(list2),set(list3),....))#如果有很多个,可以继续添加
res = list(set(list1).intersection(list2,list3,....))#如果有很多个,可以继续添加
结果应该是:res = [2,4]
2)求多个list的并集:
#list(set(list1).union(set(list2),set(list3),....))#如果有很多个,可以继续添加
res = list(set(list1).union(list2,list3,....))#如果有很多个,可以继续添加
结果应该是:res = [1,2,3,4,5,6,8,9,12,78]
3)求多个list的差集:
方法一:
res = []
for i in list1:
if i not in list2:
res.append(i)
结果应该是:res = [1,3,12] #list1中,不在list2中
另一种简写:res = [ i for i in list1 if i not in list2]
res = list( set(list1) ^ set(list2) )
推荐方法:
res = list( set(list1).difference(set(list2)))
list排序 sort:
1)默认sort:
list1 = [6, 5, 7, 9, 2, 4]
list1.sort()#无返回值
list1 = [2, 4, 5, 6, 7, 9]
res1 = sorted(list1)#list1未改变,有返回值
2)sort方法有两个可选参数:key和reverse
key:在使用时必须提供一个排序过程总调用的函数;
reverse:实现降序排序,需要提供一个布尔值:true /false,不写时默认false;
list1 = ['aaaa', 'bbb', 'eeeeeee', 'cc']
list1.sort(key=len)#按照元素的长度排序
list1.sort(key=len, reverse=True)#按照长度降序排序
例:
#1按照每一个元素的len排序:
list1= [[1,2],[3,4,5,6],(7,),'123']
sorted(list1, key=len)
#2按照其中每一个值的绝对值排序
list1 = [1,3,5,-2,-4,-6]
list2 = sorted(list1, key=abs)
#3将列表中的每个元素变为小写,再按每个元素中的每个字母的ascii码从小到大排序
d =['CCC', 'bb', 'ffff', 'z']
sorted(d,key = str.lower )
#4自定义函数排序,lastchar为函数名,这个函数返回列表e中每个元素的最后一个字母
def lastchar(s):
return s[-1]
s1 = ['abc','b','AAz','ef']
sorted(s1, key = lastchar)
#字典元素
dic_list = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}]
res = sorted(dic_list , key = lambda d:d['age'])
实例:
Django 数据库model:
class Stu(models.Model):
id = models.CharField('ID',max_length=20,primary_key=True)
name = models.CharField('名称',max_length=20)
created_time = models.DateField('创建日期')
View查询:
stu1 = Stu..objects.filter(id= id)
stu2 = Stu..objects.filter(name = name)
stu3 = Stu..objects.filter(created_time = time)
#求stu1、stu2、stu3 的交集:
stu_list = list(set(stu1).intersection(stu2,stu3))
#求stu_list 按照created_time 和 id 排序,倒序
stu_list = sorted(stu_list, key = lambda o:(o.created_time, o.id), reverse=True)
#以上是list中是obj元素 即对象stu