python – 删除字符串中的常用字母

所以我有一个有趣的问题.

我试着写一些字混乱,我需要知道我用过哪些字母,哪些字母没用.到目前为止,我有以下代码

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']

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...