當前位置:成語大全網 - 書法字典 - 如何理解python中的for循環在其之後?

如何理解python中的for循環在其之後?

I等於9因為閉包,I指的是lambda生成後for循環中的I。

建議妳看壹下python的列表生成器。

f =[(lambda n:I+n)for I in range(10)]等價於。

f=[]

對於範圍內的I(10)

f . append(λn:I+n)

以下是相關內容

List Comprehensions是Python內置的壹個非常簡單但功能強大的列表生成器,可以用來創建列表。

例如,要生成list [1,2,3,4,5,6,7,8,9,10],可以使用range(1,11):

& gt& gt& gt範圍(1,11)[1,2,3,4,5,6,7,8,9,10]

但是如何生成[1x1,2x2,3x3,...,10x10]?方法壹是循環:

& gt& gt& gtl =[]& gt;& gt& gt對於範圍內的x(1,11):...?l .追加(x * x)

...& gt& gt& gtL

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

但是循環太繁瑣,列表生成公式可以用壹行語句代替循環生成上面的列表:

& gt& gt& gt[x * x表示範圍內的x(1,11)]

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

寫列表生成公式的時候,把要生成的元素x * x放在前面,後面是for循環,就可以創建壹個列表,非常有用。多寫幾次,妳很快就會熟悉這個語法了。

如果判斷可以加在for循環之後,這樣我們就可以只過濾出偶數方塊:

& gt& gt& gt[如果x % 2 == 0,則x * x表示x在範圍(1,11)內]

[4, 16, 36, 64, 100]

您也可以使用兩層循環,這可以生成壹個完整的排列:

& gt& gt& gt[m + n代表‘ABC’中的m,代表‘XYZ’中的n]

['AX ',' AY ',' AZ ',' BX ',' BY ',' BZ ',' CX ',' CY ',' CZ']

很少使用三層或更多層的循環。

使用列表生成,您可以編寫非常簡潔的代碼。例如,列出當前目錄下的所有文件和目錄名可以通過壹行代碼實現:

& gt& gt& gtImport os #導入壹個os模塊,其概念在後面討論>;& gt& gtos.listdir(' . '中d的d)] # os.listdir可以列出文件和目錄['.emacs.d ','。ssh ','。回收站',' adlm ','應用程序','桌面','文檔','下載','資料庫','電影','音樂','圖片','公共',' VirtualBox VMs ','工作區',' XCode']

事實上,for循環可以同時使用兩個或多個變量。比如dict的iteritems()可以同時叠代key和值:

& gt& gt& gtd = {'x': 'A ',' y': 'B ',' z ':' C ' } & gt;& gt& gt對於d.iteritems()中的k,v:...打印k,' = ',v...y = B

x = A

z = C

因此,列表生成器也可以使用兩個變量來生成列表:

& gt& gt& gtd = {'x': 'A ',' y': 'B ',' z ':' C ' } & gt;& gt& gt[k + '=' + v for k,v in d.iteritems()]

['y=B ',' x=A ',' z=C']

最後,列表中的所有字符串都是小寫的:

& gt& gt& gtL = ['Hello ',' World ',' IBM ',' Apple ']& gt;& gt& gt[s.lower()用於L中的s]

['妳好','世界',' ibm ','蘋果']

總結

使用列表生成公式,可以快速生成列表,可以從壹個列表推導出另壹個列表,但是代碼非常簡潔。

思考:如果列表同時包含字符串和整數,由於沒有針對非字符串類型的lower()方法,列表生成公式會給出錯誤:

& gt& gt& gtL = ['妳好','世界',18,'蘋果',無]

& gt& gt& gt[s.lower()用於L中的s]

回溯(最近壹次呼叫):

文件" & lt標準輸入>,行1,在& lt模塊& gtattribute error:“int”對象沒有屬性“lower”

使用內置isinstance函數確定變量是否為字符串:

& gt& gt& gtx = ' abc ' & gt& gt& gty = 123 >& gt& gtisinstance(x,str)True & gt;& gt& gtisinstance(y,str)False

請修改列表生成公式,通過添加if語句確保列表生成公式可以正確執行。