1. 程式人生 > >day 16 - 2 內建函式(二)練習

day 16 - 2 內建函式(二)練習

內建函式(二)練習

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]