【问题标题】:Removing all but specific string sequence删除除特定字符串序列外的所有字符串
【发布时间】:2017-06-06 18:01:22
【问题描述】:

我有一个字符串列表。每个字符串都包含我需要的特定字符序列——我正在寻找三到四个确切的序列——其余的包含需要从字符串中消除的不可预测的数据。即:

sequences = ['sequenceA', 'sequenceB', 'sequenceC']
bigList = ['Garbage sequenceB blahblah', 'sequenceA nonsense', 'silliness sequenceC', 'total nonsense']
goalList = ['sequenceB', 'sequenceA', 'sequenceC', '']

我可以使用 sub 或 .replace 删除特定字符,但这是反转:我需要删除除特定字符串之外的所有内容,对于没有特定序列实例的列表元素,我仍然需要保留元素,以便列表保持有序。我对正则表达式还是新手 - 有没有办法做到这一点我还没有找到?

【问题讨论】:

    标签: python regex string list


    【解决方案1】:

    如果你喜欢神奇的单线。

    >>>[ ''.join([x if x in y else '' for x in sequences]) for y in bigList]
    
    ['sequenceB', 'sequenceA', 'sequenceC', '']
    

    【讨论】:

    • 哦,这太棒了,我不知道为什么我不能将其作为解决方案 - 我直接走到了它,但到那时我已经想多了。完美,谢谢。
    • 至少优化了序列元素的重建,无需在已有数据上浪费 CPU 周期:[([x for x in sequences if x in y] or [""])[0] for y in bigList] ... 仍然不必要的慢,但至少更理智一点。跨度>
    【解决方案2】:

    试试这个:

       goalList = ['' for x in range(len(bigList)]
       for elem in bigList:
           if sequenceA in bigList[elem]:
               goalList[elem] = sequenceA
           if sequenceB in bigList[elem]:
               goalList[elem] = sequenceB
           if sequenceA in bigList[elem]:
               goalList[elem] = sequenceC
    

    当然,根据数据库中的内容进行调整。

    【讨论】:

      【解决方案3】:

      你可以用一个简单的双循环来做到这一点:

      sequences = ['sequenceA', 'sequenceB', 'sequenceC']
      bigList = ['Garbage sequenceB blahblah', 'sequenceA nonsense', 'silliness sequenceC', 'total nonsense']
      
      goalList = []
      for element in bigList:
          for seq in sequences:
              if seq in element:
                  break
          goalList.append(seq if seq in element else "")
      
      print(goalList)
      # prints: ['sequenceB', 'sequenceA', 'sequenceC', '']
      

      【讨论】:

      • 这是我开始着手的方向,我认为我过度使用正则表达式 - 谢谢,作为一个初学者,这真的有助于我思考它。
      • @ThoureaulyRekt - 如果您关心性能,这就是您应该使用的(如果需要,可以进一步加快速度,例如,如果sequences 是一个长列表,则首先将其变成一组)。仅仅因为它看起来整洁而使用它是通往受伤城镇的道路......
      猜你喜欢
      • 2011-06-23
      • 2017-09-01
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多