获取所有子串频率忽略空间

时间:2019-07-15 04:29:04

标签: python string

我有一些字符串集,我想提取所有子字符串及其频率超过1个字符的子字符串

ForEach-Object

这应该返回:

example_string = "coco crunch is nice nicenice"

这是一种对子字符串的暴力破解。

欢迎引用。谢谢。

1 个答案:

答案 0 :(得分:1)

尝试使用此字典理解功能:

print({(k[:len(k)//2] if k.count(k[:len(k)//2]) > 1 and len(k[:len(k)//2]) > 1 else k): (example_string.count(k[:len(k)//2]) if k.count(k[:len(k)//2]) > 1 and len(k[:len(k)//2]) > 1 else example_string.count(k)) for k in example_string.split()})

输出:

{'co': 2, 'crunch': 1, 'is': 1, 'nice': 3}

如果您还希望包含原始子字符串:

from collections import Counter
print({**Counter(example_string.split()), **{(k[:len(k)//2] if k.count(k[:len(k)//2]) > 1 and len(k[:len(k)//2]) > 1 else k): (example_string.count(k[:len(k)//2]) if k.count(k[:len(k)//2]) > 1 and len(k[:len(k)//2]) > 1 else example_string.count(k)) for k in example_string.split()}})

输出:

{'coco': 1, 'crunch': 1, 'is': 1, 'nice': 3, 'nicenice': 1, 'co': 2}