Python3 基礎:filter和sorted函式
阿新 • • 發佈:2019-02-15
filter()
Python內建的filter()函式用於過濾序列。
和map()類似,filter()也接收一個函式和一個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素。
filter()函式返回的是一個Iterator,也就是一個惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list。
其實filter()函式就是一個過濾函式,根據傳入的函式來定義過濾規則。
去除佇列中的空元素:
def empty(x): return x and x.strip() print(filter(empty,['',' ','a ','b',' D']))
sorted()
Python內建的sorted()函式就可以對list進行排序.
此外,sorted()函式也是一個高階函式,它還可以接收一個key函式來實現自定義的排序,例如按絕對值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
key指定的函式將作用於list的每一個元素上,並根據key函式返回的結果進行排序。
我們再看一個字串排序的例子:
>>> sorted(['bob', 'about', 'Zoo', 'Credit']) ['Credit', 'Zoo', 'about', 'bob']
預設情況下,對字串排序,是按照ASCII的大小比較的,由於’Z’ < ‘a’,結果,大寫字母Z會排在小寫字母a的前面。
我們給sorted傳入key函式,即可實現忽略大小寫的排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
要進行反向排序,不必改動key函式,可以傳入第三個引數reverse=True
:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']