Python內置函數之filter

一:filterpython

Help on built-in function filter in module __builtin__:
 
filter(...)
    filter(function or None, sequence) -> list, tuple, or string
    
    Return those items of sequence for which function(item) is true.  If
    function is None, return the items that are true.  If sequence is a tuple
    or string, return the same type, else return a list.

說明:bash

    filter(func,seq)
app

    調用一個布爾函數func來迭代遍歷每一個seq中的元素;返回一個使func返回值爲True的元素的序列
ide

    

例子:函數

>>> list1=[1,2,3]        --定義一個列表
>>> filter(None,list1)   --若是function 爲 None ,那麼返回序列所有
[1, 2, 3]
>>> 
>>> list2=[1,2,3,4]
>>> def f1(x):  --對於序列X中的每一個item依次進行判斷,若是知足某個條件就返回真,不知足就返回假
...   if x>2:
...     return True
...   else:
...     return False
... 
>>> filter(f1,list2)  --返回在函數f1中知足條件的item,若是序列是元祖,那麼返回的結果也是元祖,字符串和列表同理
[3, 4]
>>>

實際的案例ui

好比要求輸出/etc/passwd密碼文件中全部以/bin/bash 結尾的用戶到一個列表中spa

程序編寫思考:能夠利用readlines函數將/etc/passwd文件輸出到一個列表中,而後寫一個布爾函數判斷若是列表中的子串是以/bin/bash結尾的那麼就返回真,若是不是那麼就返回假,再利用filter函數進行過濾,便可達到要求blog

PYTHON代碼以下ip

#!/usr/bin/env python
# coding:utf-8
# @Filename: checkpwd.pt
 
def show_file(file):
    '''Open file and returns the file content'''
    
    fp = open(file)
    contentList = fp.readlines()
    fp.close()
    return contentList
 
 
def filter_line(listArg):
    '''Filter out the lines that end in /bin/bash in the /etc/passwd'''
    
    if listArg.strip('\n').endswith('/bin/bash'):
        return True
    else:
        return False
        
def show_user(filterArg):
    '''Append the user to list'''
    
    showList=[]
    for i in filterArg:
        showList.append(i[:i.index(':')])
    print showList
    
if __name__ == '__main__':
    file = '/etc/passwd'
    clist = show_file(file)
    flist = filter(filter_line,clist)
    show_user(flist)

執行結果以下圖utf-8

wKiom1g6aY3TWPkvAAAZHU2mIbI493.png-wh_50

相關文章
相關標籤/搜索