【问题标题】:Python pattern auto matching within the list列表中的 Python 模式自动匹配
【发布时间】:2021-03-26 07:02:39
【问题描述】:

我正在尝试编写一个小脚本来将具有相似模式的字符串组合在一起。以下是我的程序sn-p,运行正常,但有点不准确。

lst = ["report-2020.10.13", "report-2020.12.12", "analytics-2020.12.14", "sales-cda87", "analytics-2020.11.21", "sales-vu7sa"]

final = []
for pat in lst:
    pat = pat[:len(pat) // 2]
    ils = []
    for pat2 in lst:
        if pat2.startswith(pat):
            ils.append(pat2)
    final.append(tuple(ils))

finalls = list(set(final))
for f in finalls:
    print(f)

另外,我想要对字符串进行分组的确切字符串模式。例如,从字符串列表 ["rep-10-01", "rep-10-02", "rep-11-06"] 我想要 "rep-" 作为模式。 是否需要改进?或者任何可以帮助我解决第一个和第二个问题的库/模块? 提前致谢。

【问题讨论】:

  • 我强烈建议您研究称为 Trie 的数据结构。这正是为你做的。链接:geeksforgeeks.org/trie-insert-and-search
  • 他为什么需要 Trie DS? Python 有电池 - defaultdict 在这种情况下可以提供帮助。

标签: python-3.x string text text-processing


【解决方案1】:

这是否如您所愿:


    from collections import defaultdict
    
    res = defaultdict(str)
    
    lst = ["report-2020.10.13", "report-2020.12.12", "analytics-2020.12.14",
           "sales-cda87", "analytics-2020.11.21", "sales-vu7sa"]
    
    #ll = ['rep-10-01', 'rep-10-02', 'rep-11-06']
    
    
    for pat in lst:
        pattern = pat.split('-')
        #print(pattern[0])  # real pattern - eg. report, sales, analytics
        
        res[pattern[0]] += pat+ ', '
        
    print(res)

      Output: 
    defaultdict(<class 'str'>, {'report': 'report-2020.10.13, report-2020.12.12, ', 'analytics': 'analytics-2020.12.14, analytics-2020.11.21, ', 'sales': 'sales-cda87, sales-vu7sa, '})

【讨论】:

  • @Atharva Kale 这篇文章对您有帮助吗?如果是,请接受,或者问其他问题?
  • 是的。它确实有效,不知何故。但是,如果我的模式包含多个连字符怎么办?这些连字符分隔的模式对我来说意味着什么? (这是我的情况)。可以做什么?
  • 很高兴您发现它很有帮助。那你会接受答案吗?对于后续问题,可以通过一些示例发布另一个问题。
猜你喜欢
  • 2021-10-13
  • 2016-04-24
  • 1970-01-01
  • 2022-12-13
  • 2022-12-04
  • 2023-03-24
  • 1970-01-01
  • 2019-12-10
  • 2018-10-01
相关资源
最近更新 更多