银河出逃时 2021-07-28 22:40 采纳率: 88.2%
浏览 32
已结题

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"))
  • 写回答

1条回答 默认 最新

  • Nicky Cat 2021-07-29 00:06
    关注
    
        #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"))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 已采纳回答 7月29日
  • 修改了问题 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度