Python按性别、姓名排序列表并标准化格式出错求助
修正Python数据排序问题
输入示例
4 m.hosSein.python f.miNa.C m.aHMad.C++ f.Sara.java
每行数据格式为性别.姓名.编程语言,其中f代表女性,m代表男性。
预期输出
f Mina C f Sara java m Ahmad C++ m Hossein python
问题代码
input1=int(input()) results = [] for k in range(input1): input2 = input().split(".") results.append(input2) results.sort(key=lambda x:(x[0::]), reverse=False) for i in results: i[1]=str(i[1]) i[1]=i[1].title() print(i[0],str(i[1]), i[2])
问题原因
当前排序使用原始拆分后的整个列表作为依据,而原始姓名是大小写混合的字符串。比如miNa的原始首字母是小写m(ASCII码109),Sara的原始首字母是大写S(ASCII码83),由于大写字母ASCII码小于小写字母,排序时Sara会排在miNa前面,不符合预期的姓名字典序。
修正后的代码
input1 = int(input()) results = [] for k in range(input1): input2 = input().split(".") results.append(input2) # 按性别优先,再按姓名的小写形式排序,保证字典序正确性 results.sort(key=lambda x: (x[0], x[1].lower())) for i in results: name = i[1].title() print(i[0], name, i[2])
说明
- 排序时将姓名转为小写作为排序依据,这样
miNa和Sara会按照mina和sara的字典序排列,确保Mina排在Sara之前。 - 保持性别优先的排序逻辑,相同性别下按姓名字典序排列。
内容的提问来源于stack exchange,提问作者economy m
相关产品推荐
相关产品推荐

