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