python代码不理解,解释1下

您的任务是对给定的字符串进行排序。字符串中的每个单词都将包含一个数字。
这个数字是单词在结果中的位置。
注意:数字可以是 1 到 9。所以 1 将是第一个单词(不是 0)。
如果输入字符串为空,则返回一个空字符串。输入字符串中的单词将仅包含有效的连续数字。

实例:
'is2 Thi1s T4est 3a' --> 'Thi1s is2 3a T4est'
' ' --> ' '

def order(sentence):
    return ' '.join(sorted( sentence.split(), key=lambda x: int( [l for l in x if l.isdigit()][0] ) )) #不懂
print(order("is2 Thi1s T4est 3a"))

def order(words):
  return ' '.join(sorted(words.split(), key=lambda w:sorted(w))) #不懂
print(order("is2 Thi1s T4est 3a"))

    #str.join(): 字符串str连接join()中的内容,此处是' '连接join()中的内容
    
    #sorted():排序,可以按指定的key排序,key:指定需要排序的对象中的一个元素来进行排序
    #比如说对于L=[('b',2),('a',1),('c',3),('d',4)]
    #sorted(L, key=lambda x:x[1]) 
    #即按照每个()中的第2个元素对L进行排序,因此返回的是[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    #str.split():字符串str分割(默认用空格或换行符),此处是按空格把sentence分割成单个词,得到['is2', 'Thi1s', 'T4est', '3a']
    
    #接下来就要确定对于单个词,排序时所用的key
    #l for l in x if l.isdigit() 保留字符串中是数字的部分:is.digit()用于判断是否是数字;
    #这样得到的就是一个数字,因为只有一位,且python中的第1位用0表示,所以加上[0];
    #将得到的元素转换为整型int()
    #因此,最后就是按单词中的字母排序
    
def order(sentence):
    sorted( sentence.split(), key=lambda x: int( [l for l in x if l.isdigit()][0] ) )
    return ' '.join(sorted( sentence.split(), key=lambda x: int( [l for l in x if l.isdigit()][0] ) )) #不懂
print(order("is2 Thi1s T4est 3a"))


# 这里的关键是要理解sorted()中的参数key()
# 举例来说,假如你要把ABCD四个人排序,你给了每个人一副牌,让他们各自拿出一张,按照拿出牌的大小,确定排队的顺序
# 这个拿出的牌就是key

# key这张牌可以是数字,也可以是字符,也可以是数组
# 这里的lambda规定了一种出牌的规矩:每个人把自己手中显示是数字的牌留下,把这个牌取出来,转换成数值,然后排序
#显然这个很啰嗦,因此下面这种方法就比较简洁:

#我先把这个lambda拆出来:
words = "is2 Thi1s T4est 3a" 
print(words.split())
#返回['is2', 'Thi1s', 'T4est', '3a']

so = lambda w : sorted(w)
print(so('is2'))
#返回['2', 'i', 's']

#这里的lambda定义了一个规矩:每个人把自己手头的牌从小到大先排一排,然后直接用作key
#数字自然而然地就排到了字母前面
#也就是说,对于‘is2’这个人,他出的牌是['2', 'i', 's']
#同理,'Thi1s'这个人,出了['1', 'T', 'h', 'i', 's']
#'Thi1s'的牌就比‘is2’要小(Python排序时先看第一位),因此就排到了前面

def order(words):
  return ' '.join(sorted(words.split(), key=lambda w:sorted(w))) #不懂
print(order("is2 Thi1s T4est 3a"))