首页 > 解决方案 > 如何通过限制每个字符可以出现的次数来过滤字符串?

问题描述

我正在尝试编写一个函数,该函数通过允许每个字符出现多少次的特定限制来过滤字符串列表。

例如,这是我的输入:

foo = ['BAR', 'BAAR', 'RABA', 'AAARB', ...]
characters = ['B', 'A', 'A', 'R']

输出应该是:

['BAR', 'BAAR', 'RABA']

值 AAARB 被排除,因为它有 3 个 A。包含值 BAR 是因为它可以使用少于最大字符出现次数的值。

这个过程应该是高效的,因为我的输入字符串列表有大约 7,300 个项目,而我的允许字符列表总是有 12 个字符。

标签: python

解决方案


通过比较允许字符的直方图和每个字符串中的字符,您可以很容易地做到这一点。例如:

import collections

def find_subsets_of(strings, allowed_chars):
    allowed = collections.Counter(allowed_chars)
    for string in strings:
        counts = collections.Counter(string)
        if all(counts[ch] <= allowed[ch] for ch in counts):
            yield string

result = list(find_subsets_of(foo, characters))

推荐阅读