python3 對檔案的每行字元按長度排序
一、 列表的sort排序函式
函式原型:
list.sort(key=none,reverse=false)
函式功能:
對原列表進行排序,完成排序後,原列表變為有序列表。預設情況(不傳入任何引數時)按字典順序排序。
函式引數:
(1) key: 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於可迭代物件中。指定可迭代物件中的乙個元素來進行排序指定排序時使用的單個元素或多個元素、lambda表示式;
(2) reverse:指字排序規則是公升序還是降序,預設為公升序排序;
二、 排序示例
1. 字串排序
def list_sort_string():
list=["delphi","delphi","python","python","c++","c++","c","c","golang","golang"]
list.sort() #按字典順序公升序排列
print("公升序:",list)
list.sort(reverse=true) #按降序排列
print("降序:",list)
排序結果:
公升序: ['c', 'c++', 'delphi', 'golang', 'python', 'c', 'c++', 'delphi', 'golang', 'python']
降序: ['python', 'golang', 'delphi', 'c++', 'c', 'python', 'golang', 'delphi', 'c++', 'c']
2. 數值型排序
def list_sort_number():
list=[30,40,10,50,50.1,80,60,100,90]
list.sort()
print("公升序:",list)
list.sort(reverse=true)
print("降序:",list)
排序結果:
公升序: [10, 30, 40, 50, 50.1, 60, 80, 90, 100]
降序: [100, 90, 80, 60, 50.1, 50, 40, 30, 10]
3. 根據列表中類物件的屬性排序
class element(object):
def __init__(self,id="",name=""):
self.id=id
self.name=name
def __lt__(self, other): # override 《操作符
if self.id由於list.sort()函式在排序時,使用的是小於號對比,所以自定義的資料型別需要override __lt__(小於)函式才能實現排序。
根據element的id屬性排序
排序列的結果:
id=01,name=jack
id=120,name=tom
id=130,name=json
4. 根據列表中元素的長度排序
def list_sort_by_length():
list=["delphi","delphi","python","python","c++","c++","c","c","golang","golang"]
list.sort(key=lambda ele:len(ele)) #按元素長度順序公升序排列
print("公升序:",list)
list.sort(key=lambda ele:len(ele),reverse=true) #按降序排列
print("降序:",list)
借助於lambda表示式,計算list列表中的元素的長度,根據元素的長度進行排序
排序的結果:
公升序: ['c', 'c', 'c++', 'c++', 'delphi', 'delphi', 'python', 'python', 'golang', 'golang']
降序: ['delphi', 'delphi', 'python', 'python', 'golang', 'golang', 'c++', 'c++', 'c', 'c']
5. 根據列表中元素的多個屬性進行排序:
同樣借助於lambda表示式完成,當然也可以定義乙個與labmda具有相同意義的函式實現排序。
排序結果:
6. 動態的根據使用者指定的索引進行排序
有時候,在寫**之前,並不知道根據二維表的哪幾列排序,而是在程式執行的時候根據輸入或配置決定的,為了解決這個動態根據多個列或屬性排序的問題,借助了eval()函式,eval函式能夠把字串編譯成python**並執行,從而達到動態根據多個列或屬性排序的目的。
排序結果:
綜上,基本總結了list.sort的使用的大部分場景,如下:
1、預設排序
2、根據類物件的單個屬性進行排序,當然也可以擴充套件為根據類物件的多個屬性進行排序
3、根據元素的固有屬性進行排序,如:長度、第n個元素等。為了簡單,所以借助了lambda表示式,當然也可以使用普通函式代替lambda表示式
4、動態的根據多個列進行排序,同時借助lambda和eval()函式實現
5、另外相比python2,python3取消了sort函式中的 cmp方式,只能用key方式。
所以python2用cmp方式寫的函式遷移到python3中需要轉換。
from functools import cmp_to_key
sort(iterable, key=cmp_to_key(cmp_fun))
《感謝csdn:xpresslink的指正》
Python3 list注意的事項
list1 1,2,3,4 list2 list1 print list2 print id list1 id list2 列印出的結果如下 1,2,3,4 2087137645832 2087137645832可以看出,使用等號確實可以給列表賦值,但其在記憶體中的id是一樣的,說明實際上這其實是同...
python3 list列表的常用方法
python3 list列表的常用方法 li 1,2,3 clera 清除整個列表,慎用 li.clear help li.clear clear method of builtins.list instance l.clear none remove all items from l copy 是...
python3 list序列相關函式
這部分的內容不僅僅是用於列表,一般來說其他的序列 比如元祖 字典 集合等 也是可以進行使用的。1 any list 列表list中有乙個元素為邏輯真,則返回true,全為假時則返回false。注意any 返回的是false,在程式設計時要考慮序列為空的情況。2 all list 列表在所有元素都為真...