R7-4 按1的个数排序
分数 10
作者 usx程序设计类课程组
单位 绍兴文理学院
对于给定若干由0、1构成的字符串(长度不超过80),要求将它们按1的个数从小到大排序。若1的个数相同,则按字符串本身从小到大排序。 要求至少使用一个自定义函数。
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,首先输入一个整数n(1≤n≤100),然后输入n行,每行包含一个由0、1构成的字符串。
输出格式:
对于每组测试,输出排序后的结果,每个字符串占一行。
输入样例:
3
10011111
00001101
1010101
输出样例:
00001101
1010101
10011111
def fun(x):
return len(x.replace('0',''))
n = int(input())
nums = []
for i in range(n):
nums.append(input())
print('\n'.join(sorted(sorted(nums),key=fun)))
还是用字典排序容易些,但要考虑多关键字排序, 以及键值唯一性,即录入字串在有相同的怎么处理?
n = int(input())
lst = []
for i in range(n):
lst.append(input())
dic = { s:(s.count('1'),lst.count(s)) for s in lst }
for i in sorted(dic.items(),key=lambda e:(e[1][0],e)):
for _ in range(i[1][1]):
print(i[0])