【问题标题】:Deriving pattern for runs of letters字母运行的派生模式
【发布时间】:2022-10-17 13:06:06
【问题描述】:

我有一个字符串列表“1. AGGCHRUSHCCKSGDSKCGGHCSG” 我想在我的字符串中获取所有“G”并打印这样的模式: GG-G-GG-G

如果我的字符串中没有 Gs,它应该打印“No G found”。

我已经在 python 中尝试了基本的字符串、子字符串和打印,但这就是我所得到的。我也找不到这个的 Excel 公式。我怎样才能生成这种模式?

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用正则表达式将一个或多个非“G”字符序列替换为单个破折号,然后使用 .strip() 删除任何前导或尾随破折号:

    import re
    
    data = "1. AGGCHRUSHCCKSGDSKCGGHCSG"
    result = re.sub(r"[^G]+", r"-", data).strip("-")
    if "G" in result:
        print(result)
    else:
        print("No G found")
    

    这输出:

    GG-G-GG-G
    

    【讨论】:

      【解决方案2】:

      编辑-@PranavHosangadi 的建议:

      from itertools import groupby
      
      string = "1. AGGCHRUSHCCKSGDSKCGGHCSG"
      
      groups = ("".join(group) for key, group in groupby(string) if key == "G")
      
      print("-".join(groups))
      

      输出:

      GG-G-GG-G
      >>> 
      

      【讨论】:

      • 您可以通过在计算 groups 时加入每个组中的字母以及用生成器表达式替换该列表推导来提高此代码的效率。 groups = ("".join(group) for key, group in groupby(string) if key == "G"); "-".join(groups)
      【解决方案3】:
      string1= "1. AGGCHRUSHCCKSGDSKCGGHCSG"
      string2=""
      for char in string1:
          if char=='G':
              string2+=char
          else:
              string2+='-'
      print(string2)
      

      像这样?

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2017-11-08
      相关资源
      最近更新 更多