Python排序篇(一)| 封闭图形个数

57 阅读1分钟

蓝桥杯题目 19733 封闭图形个数

最初思路:

因为涉及原值和计算后数值的排序,所以我想到的是二维数组,首先采用列表表达式,初始化一个二维数组[ [0]*2 for i in range(n) ],之后进行赋值和计算,最终利用列表排序函数sort进行排序,a.sort(key = lambda x:(x[1],x[0])

我的代码:

def algorithm(n):
    m = str(n)
    cnt = 0
    for i in range(len(m)):
        if m[i]=='0' or m[i]=='4' or m[i]=='6' or m[i]=='9':
            cnt+=1
        elif m[i]=='8':
            cnt+=2
    return cnt
            
n = int(input())
a = [ [0]*2 for _ in range(n) ]
b = list(map(int,input().split()))
for i in range(n):
    a[i][0] = b[i]
    a[i][1] = algorithm(b[i])

a.sort(key=lambda x:(x[1],x[0]))
for i in range(n):
    print(a[i][0],end=' ')

网友代码

n = int(input())
N = list(map(str, input().split()))

A = ['1','2','3','5','7']
B = ['0','4','6','9']
C = ['8']

def var(x):
  s = 0
  for i in x:
    if i in B:
      s += 1
    if i in C:
      s += 2
  return s, int(x) # 这里是因为规则中还有 s1 = s2 时,比较 x1 和 x2

N.sort(key = var)
print(*N) # *是拆开列表, 把元素按空格间隔的输出

学习心得

sort函数的运用

可以先利用函数计算,再将需要的值返回回去,这样就可以简化不必需要的赋值操作

解包的运用

对于上述的要求格式,利用解包输出更方便一点,就不需要循环输出了。

A = ['1','2','3','5','7']
print(*A)

输出结果

1 2 3 5 7