day015-16 生成器面试题和内置函数
一、生成器面试题
(一)容易的
1 def demo(): 2 for i in range(4): 3 yield i 4 5 6 g = demo() 7 g1 = (i for i in g) 8 g2 = (i for i in g1) 9 10 11 print(list(g1)) 12 print(list(g2)) 13 14 # 求输出结果 15 # 主要考核生成器的特性
(二)一般的
1 def add(n, i): 2 return n + i 3 4 5 def test(): 6 for i in range(4): 7 yield i 8 9 10 g = test() 11 for n in [1, 10]: 12 g = (add(n, i) for i in g) 13 14 print(list(g)) 15 16 # 同求输出结果
(三)升级的
1 def add(n, i): 2 return n + i 3 4 5 def test(): 6 for i in range(4): 7 yield i 8 9 10 g = test() 11 for n in [1, 10, 8, 7, 9, 666]: 12 g = (add(n, i) for i in g) 13 14 print(list(g))
(四)提示
n = (add(n, i) for i in (add(n, i) for i in(add(n, i) for i in(add(n, i) for i in(add(n, i) for i in))))) 防止自己看不懂。
二、内置函数
(一)名称
print、input
map、lambda、max、min、filter、sorted
len、type、id
open、dir
str、int、bool、tuple、list、set、bytes
eval、exec(ps:eval函数只能计算单个表达式的值,可以有返回值;而exec函数可以动态运行代码段,返回值永远为None)
(二)用法
待补充
三、作业
1、用map来处理字符串列表,把列表中所有人都变成sb,比方xxx_sb
1 name = ['alex','wupeiqi','yuanhao','nezha'] 2 3 4 def func(i): 5 return i + '__sb' 6 7 8 ret = map(func, name) # ret is iter not list or tuple 9 10 print(list(ret))
2、用filter函数处理数字列表,将列表中所有的偶数筛选出来。
1 num = [1, 3, 5, 6, 7, 8] 2 3 4 def func(x): 5 if x % 2 == 0: 6 return True 7 8 9 ret = filter(func, num) 10 print(list(ret))
3、随意写一个20行以上的文件。运行程序,先将内容读到内存中,用列表存储。接收用户输入页码,每页5条,仅输出当页的内容
1 with open('file',encoding='utf-8') as f: 2 l = f.readlines() 3 page_num = int(input('请输入页码 : ')) 4 pages,mod = divmod(len(l),5) #求有多少页,有没有剩余的行数 5 if mod: # 如果有剩余的行数,那么页数加一 6 pages += 1 # 一共有多少页 7 if page_num > pages or page_num <= 0: #用户输入的页数大于总数或者小于等于0 8 print('输入有误') 9 elif page_num == pages and mod !=0: #如果用户输入的页码是最后一页,且之前有过剩余行数 10 for i in range(mod): 11 print(l[(page_num-1)*5 +i].strip()) #只输出这一页上剩余的行 12 else: 13 for i in range(5): 14 print(l[(page_num-1)*5 +i].strip()) #输出5行
4、
1 如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格 2 portfolio = [ 3 {'name': 'IBM', 'shares': 100, 'price': 91.1}, 4 {'name': 'AAPL', 'shares': 50, 'price': 543.22}, 5 {'name': 'FB', 'shares': 200, 'price': 21.09}, 6 {'name': 'HPQ', 'shares': 35, 'price': 31.75}, 7 {'name': 'YHOO', 'shares': 45, 'price': 16.35}, 8 {'name': 'ACME', 'shares': 75, 'price': 115.65} 9 ] 10 11 6.1.计算购买每支股票的总价 12 ret = map(lambda dic : {dic['name']:round(dic['shares']*dic['price'],2)},portfolio) 13 print(list(ret)) 14 15 6.2.用filter过滤出,单价大于100的股票有哪些 16 ret = filter(lambda dic:True if dic['price'] > 100 else False,portfolio) 17 print(list(ret)) 18 ret = filter(lambda dic:dic['price'] > 100,portfolio) 19 print(list(ret))

浙公网安备 33010602011771号