python filter lambda 推導列表

2021-08-28 03:10:53 字數 4654 閱讀 5777

filter() 

函式用於過濾序列,過濾掉不符合條件的元素

語法:filter(function, iterable) 引數

function --

判斷函式。

iterable --

可迭代物件

返回值:

輸出:

objectat0

x0000022ec66bb128

>

可以用

list

將filter

類中的元素轉化為列表輸出

輸出:[0,2,4,6,8]

程式設計中提到的

lambda

表示式,通常是在需要乙個函式,但是又不想神去命名乙個函式

場合下使用,也就是指匿名函式

語法:lambda argument_list: expression

argument_list:

引數,expression:表示式

其中,引數可以是:

表示式可以是:

a,ba=1,b=2

*args

**kwargs

a,b=1,*args空……

表示式可以是: 1

none

a+bsum(a)

1 if a>10 else 0

…….lambda argument_list: expression

表示的是乙個函式。

這個函式叫做lambda函式

lambda

函式有如下特性:

lambda

函式是匿名的:所謂匿名函式,通俗地說就是沒有名字的函式。

lambda

函式沒有名字。

lambda

函式有輸入和輸出:輸入是傳入到引數列表

argument_list

的值,輸出是根據表示式

expression

計算得到的值。

lambda

函式一般功能簡單:單行

expression

決定了lambda

函式不可能完成複雜的邏輯,只能完成非常簡單的功能。由於其實現的功能一目了然,甚至不需要專門的名字來說明。

四種用法:

將lambda函式賦值給乙個變數,通過這個變數間接呼叫該lambda函式。例如,執行語句

add=lambda x, y: x+y

,定義了加法函式lambda x, y: x+y,並將其賦值給變數add,這樣變數add便成為具有加法功能的函式。例如,執行add(1,2),輸出為3

將lambda

函式賦值給

其他函式,從而將其他函式用

該lambda

函式替換

例如,為了把標

準庫time

中的函式

sleep

的功能遮蔽

(mock),我們

可以      在程式初始化

時呼叫:

time.sleep=lambda x:none。這樣

,在後續**

中呼叫time

庫的sleep

函式將不會

執行原有的功能。例如,執行

time.sleep(3)

時,程式不會休眠3秒

鐘,而是什麼都不做。 部分

python

內建函式接收函式作

為引數。典型的此

類內建函式有這些:

另外,部分python庫函式也接收函式作為引數,例如gevent的spawn函式。此時,lambda函式也能夠作為引數傳入。

乙個爭議

支援方認為使用

lambda

編寫的**更緊湊,更

「pythonic」

。反對方認為,

lambda

函式能夠支援的功能十分有限,其不支援多分支程式

if...elif...else...

和異常處理程式

try ...except...

。並且,

lambda

函式的功能被隱藏,對於編寫**之外的人員來說,理解

lambda

**需要耗費一定的理解成本。他們認為,使用

for迴圈等來替代

lambda

是一種更加直白的編碼風格。

列表推導式書寫形式:  

[表示式

for 

變數in 

列表]    或者[

表示式for 

變數in 

列表if 條件]

舉例:#!/usr/bin/python

# -*- coding: utf-8 -*-

li = [1,2,3,4,5,6,7,8,9]

print [x**2 for x in li] 

***********************************

print [x**2 for x in li if x>5]

***********************************

print dict([(x,x*10) for x in li])

***********************************

print  [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ]

***********************************

vec=[2,4,6]

vec2=[4,3,-9]

sq = [vec[i]+vec2[i] for i in range(len(vec))]

print sq

***********************************

print [x*y for x in [1,2,3] for y in  [1,2,3]]

***********************************

testlist = [1,2,3,4]

def mul2(x):

return x*2

print [mul2(i) for i in testlist]

結果如下:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

[36, 49, 64, 81]

[(5, 9), (7, 9), (9, 9)]

[6, 7, -3]

[1, 2, 3, 2, 4, 6, 3, 6, 9]

[2, 4, 6, 8]

>>> m = list(range(100))#通過

range

函式建立乙個

0-99

的數列,組成乙個

list

賦值給m

>>> m
[0, 1, 2, 3, 4, 5, 6, ……,99]

>>> m[:10]

#取前十個數

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m[-10:]

#取後十個數

[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> m[10:20]#取前

11-20

個數

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> m[:10:2]

#前十個數中,每

2個數取乙個

[0, 2, 4, 6, 8]
>>> m[5:15:3]#第

6-15

個數中,每

3個數取乙個

[5, 8, 11, 14]
>>> m[::10]

#所有的數中,每

10個數取乙個

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> m[:]

#什麼都不寫,可以原樣複製乙個

list

[0, 1, 2, 3, 4, 5, 6, 7,……,99]
支援切片的:

列表:返回列表

元組:返回元組

字串:返回字串

舉例:編寫乙個函式,實現

strip()

函式功能

Python高階06 列表推導

列表推導是一種從其他列表建立列表的方式,類似於數學中的集合推導。列表推導的使用方式非常簡單,有點類似於for迴圈。x x for x in range 10 0,1,4,9,16,25,36,49,64,81 如果想列印那些能被3整除的平方值呢?這時候可以在列表推導中新增一條if語句 x x for...

Python自學筆記 11 列表推導

用到函式的乙個常見操作是將其用於乙個列表的所有項,並使用結果來建立乙個新的列表。如果我們要生成list 1,2,3,4,5,6,7,8,9,10 能用哪種方法呢?當然最基礎的方法可以參見列表 上 但是,這種只適合項比較少的一些場景,現在我們要生成1到999的列表怎麼辦呢?list range 1,1...

Python 入門 11 列表推導式

系統 windows 7 語言版本 anaconda3 4.3.0.1 windows x86 64 編輯器 pycharm community 2016.3.2 已知列表x,對列表中每乙個元素 2,求新列表 傳統方法 我們可以新建乙個列表,對原列表進行迴圈操作,計算後的元素寫入新列表 這種寫法,功...