Py3 結構體排序

Powered by:AB_IN 局外人

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))

完結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章