內置函數(二)練習 1、用map來處理字元串列表,把列表中所有人都變成sb,比方alex_sbname=['alex','wupeiqi','yuanhao','nezha'] 2、filter 函數處理數字列表,將列表中所有的偶數篩選出來 3、隨意寫一個20行以上的文件,運行程式,先將內容讀到記憶體 ...
內置函數(二)練習
1、用map來處理字元串列表,把列表中所有人都變成sb,比方alex_sb
name=['alex','wupeiqi','yuanhao','nezha']
name=['alex','wupeiqi','yuanhao','nezha'] def func(n): return n+'_sb' #ret = map(func,name) #這裡的 ret 是一個迭代器,和可迭代的是不同的 #print(list(ret)) #迭代器 for 迴圈完了 就沒有值了 可迭代的每次 for 迴圈都會生成一個迭代器 #print(list(map(func,name))) print(list(map(lambda n:n+'_sb',name))) #內置函數
2、filter 函數處理數字列表,將列表中所有的偶數篩選出來
num = [1,3,5,6,7,8] def func2(i): return i % 2 == 0 print(list(filter(func2,num))) print(list(filter(lambda i:i % 2 == 0,num))) #lambda 嵌套 三元運算符 num = [1,3,5,6,7,8] def func(x): if x%2 == 0: return True ret = filter(lambda x:True if x%2 == 0 else False,num) #以及列表推導式 print(list(ret))
3、隨意寫一個20行以上的文件,運行程式,先將內容讀到記憶體中,用列表存儲,接收用戶輸入頁碼,每頁5條,僅輸出當頁的內容
with open('E:/py/log/file.txt',encoding='GBK')as f: l = f.readlines() pages,mod = divmod(len(l),5) if mod != 0: pages +=1 page_num = int(input('請輸入頁碼:')) if page_num < 0 or page_num == 0 or page_num > pages: print('請輸入1-'+str(pages)+'的頁數') elif page_num == pages and mod != 0: for i in range(mod): print(l[(page_num-1)*5+i].strip()) else: for i in range(5): print(l[(page_num-1)*5+i].strip
4、如下,每個小字典的name對應股票名字,shares對應多少股,price對應股票的價格
portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ]
#4.1、計算購買每支股票的總價 ret = map(lambda dic:{dic['name']:round(dic['shares']*dic['price'],2)},portfolio) print(list(ret)) # 4.2、用filter過濾出,單價大於100的股票有哪些 ret = filter(lambda p:p['name'] if p['price']>100 else False,portfolio) print(list(ret)) ret = filter(lambda dic:True if dic['price'] > 100 else False,portfolio) print(list(ret)) ret = filter(lambda dic:dic['price'] > 100,portfolio) print(list(ret))
面試題
1、閱讀代碼,說出輸出結果
d = lambda p:p*2 t = lambda p:p*3 x = 2 x = d(x) #x = 4 x = t(x) #x = 12 x = d(x) #x = 24 print(x)
2、現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函數,生成列表[{'a':'c'},{'b':'d'}]
# max min sorted filter map # 匿名函數 == 內置函數,因為匿名函數往往與內置函數一起使用 ret = zip((('a'),('b')),(('c'),('d'))) res = map(lambda t:{t[0]:t[1]},ret) print(list(res))
3、以下代碼的輸出是什麼?請給出答案並解釋
def multipliers(): return [lambda x:i*x for i in range(4)] print([m(2) for m in multipliers()]) #結果 [6, 6, 6, 6] #請修改 multipliers 的定義來產生期望的結果。 def multipliers(): return (lambda x:i*x for i in range(4)) print([m(2) for m in multipliers()]) #結果 [0, 2, 4, 6]