1. 程式人生 > >Python3 基礎:filter和sorted函式

Python3 基礎:filter和sorted函式

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']