1. 程式人生 > 程式設計 >python lambda表示式在sort函式中的使用詳解

python lambda表示式在sort函式中的使用詳解

1.lambda表示式一般用法

語法:

lamda argument:expression

example:

add = lambda x,y: x+y
print(add(10,20))<br data-filtered="filtered">>>> 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)<br data-filtered="filtered">>>>[('a',('b',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","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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。