所以我有一个有趣的问题.
我试着写一些字混乱,我需要知道我用过哪些字母,哪些字母没用.到目前为止,我有以下代码:
def remove_common(x,y): sort = sort = lambda x: "".join(c for c in sorted(x.lower()) if c.isalpha()) x,y = sort(x),sort(y) //some code that removes y from x return leftovers print remove_common("Lets chat about code","that cool cat") print remove_common("A silly word","a lil sword") print remove_common("The Thing","Height") >>> "bdeesu" >>> "iy" >>> "tn"
我正在寻找一种简单的方法来删除两者中的字母,但在必要时留下重复的内容.
>字符串转换为小写,非字母被删除
>重复重要,所以如果x =“aa”且y =“a”,则结果为“a”,而不是“”.我认为这排除了套装的使用.
>如果y中的字母不在x中,则应该大声说出来.
>速度并不重要,但代码的优雅是.所以代码越好读越好 – 我知道的那种主观.
>输出顺序并不重要,因为我可以只转换为字符串并排序()它.
解决方法
您可以使用collections.Counter对象,可以相互减去:
import collections def remove_common(x,y): count = lambda x: collections.Counter(c for c in x.lower() if c.isalpha()) cx,cy = count(x),count(y) diff = cx - cy rev_diff = cy - cx assert len(rev_diff) == 0,"%s in y and not x" % "".join(rev_diff.elements()) return "".join(sorted(diff.elements()))
作为正在发生的事情的演示:
>>> c1 = collections.Counter("hello world") >>> c2 = collections.Counter("hey worlds") >>> c1 - c2 Counter({'l': 2,'o': 1}) >> (c1 - c2).elements() ['l','l','o']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。