【问题标题】:Finding sub patterns in list of strings在字符串列表中查找子模式
【发布时间】:2020-03-12 13:48:42
【问题描述】:

我有一个字符串列表:

mylist=["3>3>4>5","2>2>4","3>3>5>6>2","2>2>4>5", "4>5>5"]

我希望能够在此列表中找到子模式。

例如 this 通过模式查找器后的最终结果应该返回

{"3>3>":["3>3>4>5",3>3>5>6>2], "2>2>4":["2>2>4","2>2>4>5"]}

目前,我可以按字符串中的第一个字母对列表进行分组。 通过 find_sub_pattern 解析列表 mylist 得到 ​​p>

[["3>3>4>5",3>3>5>6>2],["2>2>4","2>2>4>5]]

def find_sub_pattern(data=[]):
    all_match=[]
    first_letter=[]
    for row in data:
        first_letter.append(row[0])

    list_freq=get_list_freq(first_letter)
    matched_first=[]
    for key, value in list_freq.items():
        if value > 1:
        matched_first.append(key)
    if matched_first==[]:
        return "No pattern match"
    matched_array=[]
    for p in range(0,len(matched_first)):
        matched_array.append([x for x in data if x[0] in matched_first[p]])
    print(matched_array)

【问题讨论】:

  • 应该自动找到子模式还是提前定义?
  • 我不清楚你所说的模式是什么意思
  • 子模式必须自动找到,没有定义模式@fafl
  • @doctorlove 模式是指列表中两个或多个字符串共有的子字符串
  • 如果你有"3>3>4>5", "3>3>4>6", "5>3>4", "3>3>6"呢?你会期待什么样的子模式?

标签: python string sorting pattern-matching


【解决方案1】:

这就是你想要的:

def common_start(sa, sb):
    def _iter():
        for a, b in zip(sa, sb):
            if a != b:
                return
            yield a
    return list(_iter())

l = ["3>3>4>5","2>2>4","3>3>5>6>2","2>2>4>5", "4>5>5"]
elems = [x.split(">") for x in l]
groups = [[x for x in elems if x[0] == group] for group in {x[0] for x in elems}]
result = {
    ">".join(reduce(common_start, group)):
    [">".join(x) for x in group] for group in groups if 1 < len(group)
}

【讨论】:

  • 正是我想要的。谢谢
猜你喜欢
  • 2014-11-18
  • 2012-05-16
  • 2012-11-07
  • 1970-01-01
  • 2023-04-03
  • 2018-09-27
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多