Python刻意练习 2019-05-23
2019-05-24 本文已影响0人
黄凯
Python刻意练习
- 原题目链接 https://codechalleng.es/bites/5
- 代码量:2
- 难度:3
- 知识点
- list, set
- sorted
- lambda
- for
题目翻译
- 有以下的一组数据
NAMES = ['arnold schwarzenegger', 'alec baldwin', 'bob belderbos',
'julian sequeira', 'sandra bullock', 'keanu reeves',
'julbob pybites', 'bob belderbos', 'julian sequeira',
'al pacino', 'brad pitt', 'matt damon', 'brad pitt']
- 编写一个函数,将数据去重并改为首字母大写
- 编写一个函数,将数据按surname排序
- 编写一个函数,返回最短的firstname,架设只有一个
- 越简洁越好
代码实现
def dedup_and_title_case_names(names):
"""Should return a list of names, each name appears only once"""
return list(map(lambda x: x.title(), set(names)))
def sort_by_surname_desc(names):
"""Returns names list sorted desc by surname"""
names = dedup_and_title_case_names(names)
return sorted(names, key=lambda n: n.split(' ')[1], reverse = True)
def shortest_first_name(names):
"""Returns the shortest first name (str).
You can assume there is only one shortest name.
"""
names = dedup_and_title_case_names(names)
return sorted(names, key = lambda n: len(n.split(' ')[0]) )[0].split(' ')[0]
思考
# 最后一个函数也可以用 for循环实现
names = [name.split()[0] for name in names]