Python 板


LINE

原题 http://www.lintcode.com/en/problem/word-sorting/ 这题不知道该怎麽用单纯的key去解,所以才想用comparator 不然就得手动写一个merge sort之类的 my solution in Python3 from functools import cmp_to_key class Solution: """ @param alphabet: the new alphabet @param words: the original string array @return: the string array after sorting """ def wordSort(self, alphabet, words): # Write your code here myord = {} rank = {} for i, c in enumerate(alphabet): myord[c] = i def mycmp(a, b): length = min(len(a), len(b)) for i in range(length): if a[i] != b[i]: return myord[a[i]] - myord[b[i]] return len(a) - len(b) words.sort(key = cmp_to_key(mycmp)) return words ※ 引述《uranusjr (←这人是超级笨蛋)》之铭言: : ※ 引述《suhang (suhang)》之铭言: : : https://stackoverflow.com/questions/10645986/custom-sort-python : : 我想将 : : key = lambda word: [alphabet.index(c) for c in word[0]] : : 这行转换成老式cmp function : : def mycmp(a, b): : : return a - b : : sorted(words, key = cmp_to_key(mycmp)) : : 但是不太会写 : : 请大家提示一下 a, b分别该是什麽? 谢谢 : cmp 与 key 的写法逻辑完全不一样 : 直接转换基本上是行不通的, 重写比较快 : 你必须要仔细想一下你的比对逻辑到底是什麽, 才能写出正确的比较函式 : key 函式是把本来不能比较(或比较法和你想的不同)的东西转换成可比较的东西 : 接着再用转换过的东西排序 : 例如你想把 ['apple', 'orange', 'pear'] 用字串长度排列 : 就会把它们转成字串长度 [5, 6, 4], 排序成 [4, 5, 6] 再转回来 : 那个转换函式就是 key 函式, 在这个例子就是取字串长度的 len() : cmp 函式则是会一次给你两个输入 a, b 让你比大小 : 如果 a < b 回传负数, a > b 正数, 相等回 0 : 同样用上面的例子, 如果 a = 'apple', b = 'orange' 就要回负数 : 因为 len('apple') < len('orange) : 在这个状况中, 有个简单的通解可以达成目的 : def cmp_strs(a, b): : return len(a) - len(b) : 你把可能的三个输入代进去, 应该就能知道为什麽 : 如同推文提到, cmp 函式并不是特别优秀的功能 : 从上面的例子也可以看出来, cmp 函式的实作方法相对不直觉 : 根据你想要实作的比较, 甚至可能需要很精明的程式码, 需要另外注解来解释 : 除非你需要支援非常旧(不支援 key)的 Python 版本 : 否则几乎永远不应该写 cmp 函式, 而应该使用更简洁易懂的 key 函式 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 8.41.187.50
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1519167083.A.984.html ※ 编辑: suhang (8.41.187.50), 02/21/2018 06:51:59
1F:推 vfgce: 你自己po的key=lambda word:[alphabet.index(c) for c...] 02/21 07:50
2F:→ vfgce: 这个就可以了.你的问题在那? 02/21 07:50
3F:推 vfgce: 化成list,list的比法就是依序比大小... 02/21 07:53
4F:→ vfgce: 前面几个都一样,就看长度,如[1,2]<[1,2,3] 02/21 07:53
5F:→ vfgce: 干嘛自己刻比较方法? 02/21 07:54
一开始comparator写不出来,这篇只是单纯分享我的解法 但是我觉得纯用key funcion应该解不出这题 有人有想法吗? 如果用 words.sort(key = lambda word: [alphabet.index(c) for c in word[0]]) 下面这个case会fail input: alphebet = "zbadefghijklmnopqrstuvwxyc" words = ["bca","czb","za","zba","ade"] return ["za","zba","bca","ade","czb"] expect ["zba","za","bca","ade","czb"] ※ 编辑: suhang (8.41.187.50), 02/21/2018 08:16:49
6F:推 vfgce: 程式码要改,for c in word[0]是因为它的资料分两部分, 02/21 08:35
7F:→ vfgce: 取第一部分来比,你照抄不改当然错... 02/21 08:35
8F:→ vfgce: 改成for c in word就可以了.... 02/21 08:36
9F:→ vfgce: 你用for c in word[0],只取每个字第一字母,当然错.... 02/21 08:37
10F:→ suhang: Thanks lambda我很少用,实在不熟 谢谢解释 02/21 10:15
11F:→ uranusjr: 所以你已经解了, 那你到底想问什麽问题? 02/21 10:15
12F:→ djshen: 抄别人的好歹去了解一下为什麽这样写吧 02/21 10:18
13F:→ djshen: 问题不一样还照抄 02/21 10:19
14F:推 vfgce: 你对python的资料结构及常用函式还不够熟,多了解一下list, 02/21 12:21
15F:→ vfgce: tuple,set,dict,str有些什麽东西,该怎麽用..另外,别把其他 02/21 12:22
16F:→ vfgce: 程式语言的想法用在python,取较短序列比较的写法用 02/21 12:24
17F:→ vfgce: for aa,bb in zip(a,b):来写即可,多了解一下内建函式, 02/21 12:27
18F:→ vfgce: 忘掉C及java... 02/21 12:27
19F:→ galeondx: https://tinyurl.com/yadsk3lo 03/06 04:41







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP