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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM