Python求多个list的交集、并集、差集 & list 排序

求多个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

 

上一篇:Linux 编辑器


下一篇:679. 24 点游戏