查找字符串的“ *最”公共前缀-一种更好的方法?

Alias_Knagg

我有一个钥匙清单 ['foo_a','foo_b','foo_c','fnord']

此处所有类似的解决方案都假定fnord您的文本中没有

我有这段代码可以完成工作:

def detect_prefix(keys):
    PCT = 0.70 # cutof 
    pre = ''
    l = len(keys)
    for i in range(0, len(max(keys, key=len))):
        keys = filter(lambda k: k.startswith(pre), keys)
        cnt = dict()
        for k in map(lambda k: k[i], keys):
            cnt.setdefault(k,0)
            cnt[k] +=1
        if cnt[max(cnt)] / float(l) >= PCT:
            pre += max(cnt)
        else:
            break
    return pre

非常怀疑可以更优雅地完成此操作,但是我的python-fu目前不够强大。

我很想听听一些建议。

编辑其他背景和说明。
这些是其他开发人员放入应用程序中进行翻译的键。它们应该有一个共同的前缀,但是人们会忘记,并且他们从其他代码中剪切并粘贴。“ _”作为前缀分隔符只是一种约定。最好不要假设甚至使用了分隔符。70%是完全任意的阈值。“最流行”或“主要”也将起作用。
是的,这是python 2.7,引号内的空间只是视觉效果。

f

如果知道公用前缀的所需阈值频率:

#!/usr/bin/env python
from collections import Counter
from itertools import izip_longest

strings = ['foo_a','foo_b','foo_c','fnord']
threshold = .7 * len(strings)
prefix = []
for chars in izip_longest(*strings, fillvalue=''):
    char, count = Counter(chars).most_common(1)[0]
    if count < threshold:
        break
    prefix.append(char)
print(''.join(prefix))
# -> foo_

或者,您可以收集所有通用前缀及其频率,然后再决定:

#!/usr/bin/env python
from collections import Counter
from itertools import izip_longest

strings = ['foo_a', 'foo_b','foo_c','fnord']
assert len(strings) > 1
threshold = len(strings)
prefix = []
prefixes = []
for chars in izip_longest(*strings, fillvalue=''):
    char, count = Counter(chars).most_common(1)[0]
    if count == 1:
        break
    elif count < threshold:
        if prefix:
            prefixes.append((''.join(prefix), threshold))
        threshold = count
    prefix.append(char)
if prefix:
    prefixes.append((''.join(prefix), threshold))
print(prefixes)
# -> [('f', 4), ('foo_', 3)]

这两个代码示例均假定存在主要前缀,即,每个位置上最常见的字符都属于最常见的前缀。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

便携式sed方法查找字符串的最长公共前缀

来自分类Dev

Haskell - 通过前缀在列表中查找字符串

来自分类Dev

使用BigQuery查找字符串的最频繁值

来自分类Dev

在包含子字符串的字符串集中查找字符串的快速方法

来自分类Dev

在包含子字符串的字符串集中查找字符串的快速方法

来自分类Dev

查找字符串的最后一次出现

来自分类Dev

查找字符串是否唯一

来自分类Dev

我需要一种方法来查找字符串的所有实例,然后从该字符串的末尾获取所有内容

来自分类Dev

查找字符串是否是python中某个字符串的子字符串:一种特殊情况

来自分类Dev

查找字符串是否是python中某个字符串的子字符串:一种特殊情况

来自分类Dev

查找字符串中某个字符出现次数的更好方法

来自分类Dev

在字符串数组中查找字符串的一部分

来自分类Dev

在字符串数组中查找字符串的最快方法

来自分类Dev

查找字符串是否包含子字符串的功能方法?

来自分类Dev

一线:查找字符串是否在字符串列表中

来自分类Dev

在Python语法中查找字符串前缀的正则表达式

来自分类Dev

通过前缀和句段使用RegEx查找字符串

来自分类Dev

有没有一种方法可以找到最特定的字符串模式?

来自分类Dev

查找字符串Python中字符的最后一次出现

来自分类Dev

查找字符串中字符的最后一个索引

来自分类Dev

查找字符串中字符的最后一次出现?

来自分类Dev

如何递归地查找字符串中的一组字符?

来自分类Dev

查找字符串中的最后一个特定字符类型

来自分类Dev

查找字符串中的第一个非重复字符

来自分类Dev

查找字符串的一部分并输出整个字符串

来自分类Dev

RegExp在一行中查找字符串,只要该字符串不被引号引起来

来自分类Dev

在大文本文件中查找字符串中子字符串的最后一次出现

来自分类Dev

使用正则表达式查找字符串中是否存在子字符串之一

来自分类Dev

在包含值的字符串数组中查找字符串的最后一个索引

Related 相关文章

  1. 1

    便携式sed方法查找字符串的最长公共前缀

  2. 2

    Haskell - 通过前缀在列表中查找字符串

  3. 3

    使用BigQuery查找字符串的最频繁值

  4. 4

    在包含子字符串的字符串集中查找字符串的快速方法

  5. 5

    在包含子字符串的字符串集中查找字符串的快速方法

  6. 6

    查找字符串的最后一次出现

  7. 7

    查找字符串是否唯一

  8. 8

    我需要一种方法来查找字符串的所有实例,然后从该字符串的末尾获取所有内容

  9. 9

    查找字符串是否是python中某个字符串的子字符串:一种特殊情况

  10. 10

    查找字符串是否是python中某个字符串的子字符串:一种特殊情况

  11. 11

    查找字符串中某个字符出现次数的更好方法

  12. 12

    在字符串数组中查找字符串的一部分

  13. 13

    在字符串数组中查找字符串的最快方法

  14. 14

    查找字符串是否包含子字符串的功能方法?

  15. 15

    一线:查找字符串是否在字符串列表中

  16. 16

    在Python语法中查找字符串前缀的正则表达式

  17. 17

    通过前缀和句段使用RegEx查找字符串

  18. 18

    有没有一种方法可以找到最特定的字符串模式?

  19. 19

    查找字符串Python中字符的最后一次出现

  20. 20

    查找字符串中字符的最后一个索引

  21. 21

    查找字符串中字符的最后一次出现?

  22. 22

    如何递归地查找字符串中的一组字符?

  23. 23

    查找字符串中的最后一个特定字符类型

  24. 24

    查找字符串中的第一个非重复字符

  25. 25

    查找字符串的一部分并输出整个字符串

  26. 26

    RegExp在一行中查找字符串,只要该字符串不被引号引起来

  27. 27

    在大文本文件中查找字符串中子字符串的最后一次出现

  28. 28

    使用正则表达式查找字符串中是否存在子字符串之一

  29. 29

    在包含值的字符串数组中查找字符串的最后一个索引

热门标签

归档