python--lambda表達式在sort函數中的使用


1.lambda表達式一般用法

語法:

lamda argument:expression

example:

add = lambda x, y: x+y
print(add(10, 20))
>>> 30

2.lambda表達式在sort函數中的使用

假如a是一個由元組構成的列表,對該列表進行排序時,我們需要用到參數key,也就是關鍵詞,如下面代碼所示,lambda是一個匿名函數,是固定寫法;x表示匿名函數的輸入,即列表中的一個元素,在這里,表示一個元組,x只是臨時起的一個名字,你可以使用任意的名字;x[0]表示匿名函數的輸出,即元組里的第一個元素,即key = x[0];所以這句命令的意思就是按照列表中第一個元素進行排序。

a = [('b', 4), ('a', 12), ('d', 7), ('h', 6), ('j', 3)]
a.sort(key=lambda x: x[0])
print(a)
>>>[('a', 12), ('b', 4), ('d', 7), ('h', 6), ('j', 3)]

3.舉例,leetcode中的一道題

937.重新排列日志

 

你有一個日志數組 logs。每條日志都是以空格分隔的字串。

 

對於每條日志,其第一個字為字母數字標識符。然后,要么:

 

標識符后面的每個字將僅由小寫字母組成,或;
標識符后面的每個字將僅由數字組成。
我們將這兩種日志分別稱為字母日志和數字日志。保證每個日志在其標識符后面至少有一個字。

 

將日志重新排序,使得所有字母日志都排在數字日志之前。字母日志按內容字母順序排序,忽略標識符;在內容相同時,按標識符排序。數字日志應該按原來的順序排列。

 

返回日志的最終順序。

示例 :

輸入:["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"]
輸出:["g1 act car","a8 act zoo","ab1 off key dog","a1 9 2 3 1","zo4 4 7"]

思路:先將日志數組logs分成兩個日志數組,一個存儲字母日志,一個存儲數字日志,根據題意,需將所有字母日志排在數字日志前面,字母日志按內容字母排序,故僅需對字母日志數組排序,最后返回兩個數組想家的結果就OK了。

代碼如下:

class Solution(object):
    def reorderLogFiles(self, logs):
        """
        :type logs: List[str]
        :rtype: List[str]
        """
        l1=[]
        l2=[]
        for l in logs:
            if l[-1].isalpha():
                l1.append(l)
            else:
                l2.append(l)
        l1.sort(key=lambda x:(x[x.index(' ')+1:],x[:x.index(' ')]))
        return l1+l2

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM