欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

day 16 - 2 内置函数(二)练习

程序员文章站 2022-03-25 08:01:06
内置函数(二)练习 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]