python - 如何通过限制每个字符可以出现的次数来过滤字符串?
问题描述
我正在尝试编写一个函数,该函数通过允许每个字符出现多少次的特定限制来过滤字符串列表。
例如,这是我的输入:
foo = ['BAR', 'BAAR', 'RABA', 'AAARB', ...]
characters = ['B', 'A', 'A', 'R']
输出应该是:
['BAR', 'BAAR', 'RABA']
值 AAARB 被排除,因为它有 3 个 A。包含值 BAR 是因为它可以使用少于最大字符出现次数的值。
这个过程应该是高效的,因为我的输入字符串列表有大约 7,300 个项目,而我的允许字符列表总是有 12 个字符。
解决方案
通过比较允许字符的直方图和每个字符串中的字符,您可以很容易地做到这一点。例如:
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))
推荐阅读
- android - 实现“支持”页面 - React Native
- angular - ERROR 错误:此构造函数与依赖注入不兼容
- android - react-native-fs Android 11 将文件保存在 /storage/emulated/0/Download
- exe - 如何在 pyinstaller 中制作包含视频文件的 exe 文件?
- windows - 什么是 ssh 公钥
- azure - Azure REST API 列出所有注册的应用程序 (Azure Active Directory)
- php - 使用 foreach PHP 排序数据显示最近 30 天的数据
- node.js - VScode Remote WSL 上的 Node.js 调试,VSC 找不到节点二进制文件
- flutter - 线性渐变故障的 Flutter ShaderMask 问题
- logging - 如何每 10 秒有效地从 20 台机器的 1000s 文件夹中收集日志