建議妳看壹下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語句確保列表生成公式可以正確執行。