有一串长的字符串 names="LI XIA ,ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI,CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"
要求:
1)过滤出所有的名字,去掉每个名字的左右空格和乱码,每个名字的首字母大写,比如 'LAO WANG *',处理成'Lao wang';
2)统计出所有名字里面名字最长的;
3)统计出姓的人的名单;
我先抛个砖,我的代码如下:
from pprint import pprint
def checkName(names):
newnames = [name.title().strip(' *>') for name in names.split(',')]
names_dict = {name: len(name) for name in newnames}
result = sorted(names_dict.items(), key=lambda x: x[1], reverse=True)
pprint(result)
if __name__ == '__main__':
names = "LI XIA ,ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI,CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"
checkName(names)
代码解析:
(1)pprint模块,提供了可以按照某个格式正确的显示Python已知类型数据的一种方法,这种格式可被解析器解析,又很易读。
Print()和pprint都是Python的打印模块,功能基本一样,区别是ppint模块打印出来的数据结构更加完整,每行为一个数据结构,更加方便阅读打印输出结果。特别是对于特别长的数据打印,print()输出结果都在一行,不方便查看,而pprint采用分行打印输出,所以对于数据结构比较复杂、数据长度较长的数据,适合采用pprint()打印方式。
(2)title()方法
该方法返回「标题化」的字符串,就是说所有单词都是以大写开始,其余字母均为小写。
语法:str.title()
(3)strip()方法
该方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法:str.strip([chars]),chars——移除字符串头尾指定的字符序列。
(4)split()方法
通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个字符串。
语法:str.split(str=“”,num=string.count(str))。str——分隔符,默认为所有的空字符,包括空格、换行(n)、制表符(t)等;num——分割次数。默认为-1,即分割所有。
(5)items()方法
以列表返回可遍历的(键、值)元组或数组。
语法:dict.items(),举例说明:
dict = {'Name': 'Runoob', 'Age': 7}
for i,j in dict.items():
print(i, ":t", j)
Name : Runoob
Age : 7
(6)key=lambda 元素:元素[字段索引]
比如,print(sorted(C,key=lambda x:x[1]))
x:x[1]字母可以随意修改,排序方式按照中括号[]里面的维度进行排序。[0]按照第一维排序,[1]按照第二维排序,[2]按照第三维排序。用实例具体说明一下。
取第一维
num = [(1,2.5), (1.5, 3.2), (1.3, 4.0), (2.2, 1.8)]
y,z = max(num, key=lambda x:x[0])
print(y, z)
2.2 1.8
取第二维
num = [(1,2.5), (1.5, 3.2), (1.3, 4.0), (2.2, 1.8)]
y,z = max(num, key=lambda x:x[1])
print(y, z)
1.3 4.0
取第三维
C = [('e', 4, 2), ('a', 2, 1), ('c', 5, 4), ('b', 3, 3), ('d', 1, 5)]
print(sorted(C, key=lambda x: x[2]))
[('a', 2, 1), ('e', 4, 2), ('b', 3, 3), ('c', 5, 4), ('d', 1, 5)]