生成器高级操作、函数递归

1. 文件内容

标题为:姓名,性别,年纪,薪资
egon male 18 3000
alex male 38 30000
wupeiqi female 28 20000
yuanhao female 28 10000

操作

# 1.从文件中取出每一条记录放入列表中,列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式

list1 = []
with open(r'db.txt', mode='rt', encoding='utf-8') as f:
    for line in f:
        line_dic = {}
        name, sex, age, salary = line.strip().split(' ')
        line_dic['name'] = name
        line_dic['sex'] = sex
        line_dic['age'] = age
        line_dic['salary'] = salary
        list1.append(line_dic)
    print(list1)

with open(r'db.txt', mode='rt', encoding='utf-8') as f1:
    dic_list = [{'name': list2[0], 'sex': list2[1], 'age': list2[2], 'salary': list2[3]} for list2 in
                [line.strip().split(' ') for line in f1]]
    print(dic_list)
# 2.根据1得到的列表,取出所有人的薪资之和

a = sum(int(i['salary']) for i in list1)
print(a)

salary_sum = [int(dic['salary']) for dic in list1]
print(sum(salary_sum))

# 3、根据1得到的列表,取出所有的男人的名字
list3 = [list1_dic['name'] for list1_dic in list1 if list1_dic['sex'] == 'male']
print(list3)

# 4、根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式
list_capitalize = [{'name': i['name'].capitalize(), 'sex': i['sex'], 'age': i['age'], 'salary': i['salary']} for i in
                   list1]
print(list_capitalize)

# 5、根据1得到的列表,过滤掉名字以a开头的人的信息

list4 = [i for i in list1 if not i['name'].startswith('a')]
print(list4)

2. 使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)

def func(x,y):
    print(x)
    if x > 100:
        return
    x, y = y, x+y
    func(x,y)
func(0,1)

3. 一个嵌套很多层的列表,如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 func(list1):
    for i in list1:
        if type(i) is list:
            func(i)
        else:
            print(i)

func(l)

 

posted @ 2020-12-28 08:34  Avery_W  阅读(195)  评论(0编辑  收藏  举报