sort函數
如果對python中的列表進行排序,可以使用List類的成員函數sort,該函數會在原空間上進行操作,對列表本身進行修改,不返回副本。
語法如下:
L.sort(cmp=None, key=None, reverse=False)
對列表本身進行修改
sorted函數
sorted函數就比sort函數要強大許多了,sort只能對列表進行排序
sorted可以對 所有可迭代類型 進行排序,並且返回新的已排序的列表。語法如下:
xxx = sorted(iterable, cmp=None, key=None, reverse=False)
返回新的已排序副本,原始輸入不變
基礎知識
iterable:是可迭代類型;
cmp:用於比較的函數,比較什麼由key決定;
key:用列表元素的某個屬性或函數進行作爲關鍵字,有默認值,迭代集合中的一項;
reverse:排序規則. reverse = True 降序 或者 reverse = False 升序,有默認值。
返回值:是一個經過排序的可迭代類型,與iterable一樣。
參數說明:
(1) cmp參數
cmp接受一個函數,拿整形舉例,形式爲:
def f(a,b):
return a-b
如果排序的元素是其他類型的,如果a邏輯小於b,函數返回負數;a邏輯等於b,函數返回0;a邏輯大於b,函數返回正數就行了
(2) key參數
key也是接受一個函數,不同的是,這個函數只接受一個元素,形式如下
def f(a):
return len(a)
key接受的函數返回值,表示此元素的權值,sort將按照權值大小進行排序
(3) reverse參數
接受False 或者True 表示是否逆序
💡可迭代元素經常會用到 items()
items() 是字典中的一個方法,返回由元組組成的列表。
💡比較函數經常會用到operator.itemgetter函數
operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數爲一些序號。
>>> a = {"tuffy":2, "spike":10, "tom":8, "tyke":3, "jerry":7 }
>>> print a.items() #使用items()或者iteritems()先將字典轉換爲二元組的列表
>>> [('tom', 8), ('spike', 10), ('tyke', 3), ('jerry', 7), ('tuffy', 2)]
>>> from operator import itemgetter
>>>c = sorted(a.items(),key=itemgetter(1))
>>>print c
>>>[('tuffy', 2), ('tyke', 3), ('jerry', 7), ('tom', 8), ('spike', 10)]
項目例子
from collections import defaultdict
import Target
import de_weight
import Similarity_for_TextRank_genesis as Sim
from operator import itemgetter
from tqdm import tqdm
Titlewords, TitlewordsPlus = Target.getTitle()
print('Titlewords -> ', Titlewords)
print('TitlewordsPlus -> ', TitlewordsPlus)
TitlewordsAll = Titlewords + TitlewordsPlus # 拿到了標題總內容(包括衍生詞)
print('TitlewordsAll -> ', TitlewordsAll)
Content4Title = defaultdict(int)
de_content = de_weight.getDeTarget()
print('de_content -> ', de_content)
for i in tqdm(TitlewordsAll):
for j in tqdm(de_content):
Content4Title[(i, j)] = Sim.checkIt(i, j)
Content4Title.items()
Sort_Content4Title = sorted(Content4Title.items(), key=itemgetter(1), reverse=True)
print()
print('=====結果展示=====')
print(Sort_Content4Title)
# print(sorted(Content4Title, key=Content4Title[(i, j)], reverse=True))
mid_Content4Title = [] # 存儲最終的內容
for x in Sort_Content4Title:
# print('x -> ', x)
if x[0][1] not in mid_Content4Title:
mid_Content4Title.append(x[0][1])
print()
print('mid_Content4Title -> ', mid_Content4Title)
fin_Content4Title = mid_Content4Title[:30]
print('fin_Content4Title -> ', fin_Content4Title)
fin_Content4Title = ','.join(fin_Content4Title)
def Content4TextRank():
f = open('/Users/atom-g/CodingPark622/DanMu/Content4TextRank_QianZhai_WSC.txt', 'w', encoding='UTF-8')
f.write(fin_Content4Title)
f.flush() # 不是必須加,用f.flush()強制把緩衝區裏面的數據寫到磁盤上。
f.close()