【问题标题】:Number of common letters in two strings两个字符串中常见字母的数量
【发布时间】:2016-05-04 11:04:30
【问题描述】:

我有这段代码使用collections Counter 来查找两个字符串中常见字母的数量。

from collections import Counter

a = "abcc"
b = "bcaa"

answer = 0

ac = Counter(a)
bc = Counter(b)

for key in ac:
    answer += min(ac[key], bc[key])

print answer

解决方案试图找出两个字符串中常见字母的数量(仍然计算相同的字母)我的问题是,我开发了这个逻辑,但我担心它可能是一个重新发明的轮子。有没有介绍的方法,或者更简单的方法?

注意:我的问题与试图找到字符串之间的共同字母的问题不同,我只需要计数,所以我希望找到一些基本的东西。

【问题讨论】:

  • 您能否澄清该函数是否应返回常见字符的绝对数量(如 Ahsanul Haque 的回答中所述)或常见字符的总数(包括在每个字符串中找到的重复字符)?跨度>
  • 我在他回答的评论中添加了它。
  • @MaxPythone 请不要(仅)在 cmets 中添加重要信息,尤其是在答案下方的 cmets 中。由于各种原因,答案和 cmets 有时会被删除,然后您的信息就会丢失。此外,人们必须阅读所有答案和 cmets 才能正确理解您的问题,这很糟糕。请始终edit您的问题添加新信息,然后使用 cmets 通知对此感兴趣的人。
  • 个人不知道实现与您的方法相同的更简单的代码。
  • 我可以假设字符串的长度相等吗?我应该为一对计数吗?

标签: python set venn-diagram


【解决方案1】:

不,据我所知,您并没有重新发明轮子。您的解决方案已经非常简洁。您可以使用sum 函数稍微缩短代码,然后将其放入专用函数中以强调简单性:

def num_common_letters(a, b):
    ac = Counter(a)
    bc = Counter(b)
    return sum(min(ac[key], bc[key]) for key in ac)

这里没有什么可以去掉的。

【讨论】:

    【解决方案2】:

    恕我直言,比 Frerich Raabe 的好答案略好(我没看到,这个答案是从重复的问题中迁移而来的),我会使用经典的 collections.Counter 计算两个字符串中的字母,然后执行两者之间的最小函数字典(如果一个字母不在第二个字典中,则访问它会返回 0,因此无需测试第二个字典中的值)

    导入收藏

    def common_character_count(s1,s2):
        other_counter = collections.Counter(s2)
        return (sum(min(v,other_counter[k]) for k,v in collections.Counter(s1).items()))
    
    
    print(common_character_count("aabcc","adcaa"))
    

    打印3

    使用.items() 可以节省对第一个计数器字典的一个键访问。

    【讨论】:

      【解决方案3】:

      这是在一次采访中问我的。 有一种更好的方法。 数 26 个字符,然后取最小值。 这是完整的解决方案:

      from astropy.extern.ply.cpp import xrange
      
      
      def commoncharacters(a, b):
          count1 = [0] * 26 ; count2 = [0] * 26
          for i in a: count1[ord(i) - ord('a')] += 1 ;
          for i in b: count2[ord(i) - ord('a')] += 1 ;
          res = 0
          for i in xrange(26):
              res += min(count1[i], count2[i])
      
          return res    
      
      
      # driver function
      a = "giniProtijayi"
      b = "ginikhepi"
      
      print(commoncharacters(a, b))
      

      【讨论】:

        【解决方案4】:

        要计算字符串中某个字母出现的次数,可以使用字典;

        a = "abcc"
        counter = {}
        
        
        for key in a:
            if key in counter:
                counter[key]+=1
            else:
                counter[key]=1
        

        计数器

        {'a': 1, 'b': 1, 'c': 2}
        

        【讨论】:

        • collections.Counter 就是这样
        • 谢谢,我似乎误解了这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多