今天的作业是对 列表推导式、字典生成式、匿名函数、内置函数的小练习
- 文件内容如下,标题为:姓名,性别,年纪,薪资
egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000
要求:
从文件中取出每一条记录放入列表中,列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}
的形式
# 将信息存入同一目录下的 user.txt
# 方法一 利用列表推导式
with open('user.txt','r',encoding='utf8') as fr:
#可以再将i做处理,就可以不一直split
mylist = [{'name':i.split()[0],'sex':i.split()[1],'age':int(i.split()[2]),'salary':i.split()[3]} for i in fr]
print(mylist)
#方法二 利用zip 和字典生成器
lit = []
key_list = ['name','age','sex']
with open('user.txt','r',encoding='utf8') as fr:
for line in fr:
s = line.split()
s = zip(key_list,s) # name
mydict = {k:v for k,v in s}
lit.append(mydict)
print(lit)
根据1得到的列表,取出薪资最高的人的信息
# 方法一 有名函数 def func(lis): return lis['salary'] print(max(mylist, key=func)) #方法二 匿名函数 print(max(mylist, key=lambda x:x['salary']))
根据1得到的列表,取出最年轻的人的信息
# 方法一 有名函数 def func(lis): return lis['age'] print(min(mylist, key=func)) #方法二 匿名函数 print(min(mylist, key=lambda x:x['age']))
根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式
info_new=map(lambda item:{'name':item['name'].capitalize(), 'sex':item['sex'], 'age':item['age'], 'salary':item['salary']},mylist) print(list(info_new))
根据1得到的列表,过滤掉名字以a开头的人的信息
res = filter(lambda x:x['name'][0]!='a',mylist) print(list(res))
使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)
def func(a,b,stop): if a > stop: return print(a,end=' ') func(b,b+a) func(0,1)
一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值
l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]] def get(seq): for item in seq: if type(item) is list: get(item) else: print(item) get(l)