Py3结构体排序

Powered by:AB_IN 局外人

奥林oj P1348 日期排序

感谢jtq大佬指点。

题记:终于会调颜色和大小了,矢车菊篮。i了i了。
知识都是熬夜 肝出来的。
上代码。

lst=list()#list[]是个空列表,list()是声明一个列表
while True:
    try:
        tmp=list(map(int,input().split('/')))
    except:
        break
    lst.append(tmp)
lst.sort(key=lambda x: (x[2],x[0],x[1]))#x为接受的参数(即列表中的值),冒号后面为结果
#1.按升序排的。2.按先排x[2] 再排x[0] 再排x[1]。
for i in lst:
    if i[0]<10:
        i[0]="0"+str(i[0])
    print(f'{i[0]}/{i[1]}/{i[2]}')

一、输入问题

一般为了养成好习惯,用牛客网的套版

while True:
    try:
    #中间便是所有的代码,函数可以写在外面
    except:
        break

可是题目没说几个输入,但还要把所有输入都输进来才能做题。则就先用这个套版只管输入。

二、sort函数

sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
sorted会新建一个排序好的列表并返回,而sort是修改原列表并排好序。

sorted(iterable, cmp=None, key=None, reverse=False)
list.sort(cmp=None, key=None, reverse=False)

key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
很抽象,简单来说,就是key=一个函数,函数接受一个变量,对返回的变量进行排序。

cmp —在C++里比较常用,用key好一点。

简单的排序。

lst.sort()

复杂点的结构体排序

def getkey(x):
    return x[0]#用第一个排
lst.sort(key=getkey)

三、lambda函数

lst.sort(key=lambda x: (x[2],x[0],x[1]))

也可以写成

def getkey(x):
    return (x[2],x[0],x[1])
lst.sort(key=getkey)

故这就是一个匿名函数,简洁函数的表示。

def f(x):
    return x+1
f=lambda x: x+1

就这俩玩意是一样的。

目前我的知识面,仅限于应用于 过滤、映射、结构体。

首先
map
我们知道用map输入很方便

n,m=map(int,input().split())

那么怎么应用lambda呢?

tmp=[0,1,2,3,4]
lst=list(map(lambda x: x+1,tmp))
print(lst)
#[1, 2, 3, 4, 5]

典型的函数式编程,就不用一个一个循环改了。

其次
filter

tmp=[0,1,2,3,4]
lst=list(filter(lambda x: x%2==0,tmp))
print(lst)
#[0, 2, 4]
lst=list(filter(lambda x: x%2==0,range(0,5)))
print(lst)
#[0, 2, 4]

四、输出问题

可以这么写,i已经是个列表了,比比值就行了

for i in lst:
    if i[0]<10:
        i[0]="0"+str(i[0])
    print(f'{i[0]}/{i[1]}/{i[2]}')

也可以这么写,将i里元素全转换成字符串

for i in lst:
    i=[str(j) for j in i]
    if len(i[0])==1:
        i[0]='0'+i[0]
    print('/'.join(i))#连接字符串数组

这里的第二行还可以这么写,把i里的元素变成字符串,由于map是映射,故最外面套上list()

i=list(map(str,i))

完结。

猜你喜欢

转载自blog.csdn.net/qq_45859188/article/details/106153065