【问题标题】:merge items in a list which are part of string合并列表中属于字符串的项目
【发布时间】:2020-10-11 19:53:25
【问题描述】:

我正在尝试遍历列表 (LST) 以查找项目是否包含子字符串 (SUBSTR)。发布我必须检查周围的元素以查看它们是否一起是另一个字符串(MNSTR)的一部分。例如。

LST = ["ITEM1", "ITEM2", "ITEMWV3", "ITEM4", "ITEM5"]
SUBSTR = "WV"
MNSTR = "BLAH something ITEM1 xyzpqr ITEM2 ITEMWV3 ITEM4 abcde ITEM5"
OUT = "ITEM2 ITEMWV3 ITEM4"

我正在使用 3 个 for 循环来实现这一点,我相信一定有更好的方法来做到这一点。

  1. 第一个循环遍历列表 (LST)
  2. 检查项目中是否存在 SUBSTR,如果存在则启动另一个向后的 for 循环
  3. 继续挑选每个项目,直到找不到匹配项。这个OUT之后会有“ITEM2 ITEMWV3”
  4. 从第一个匹配项开始前进,直到找不到匹配项。
  5. 在此之后,OUT 将具有“ITEM2 ITEMWV3 ITEM4”
  6. 在两个内部 for 循环执行后,中断并返回结果

列表中的项目将始终按照它们在主字符串 (MNSTR) 中存在的顺序排列。我的目标是减少 for 循环的数量并减少代码行。有人可以帮忙吗?

【问题讨论】:

  • 请包含您要优化的代码,最好是minimal reproducible example
  • 这是一个非常冗长和糟糕的代码,会大大增加问题的长度。这就是为什么我将其转换为伪代码并将其与初始状态和最终状态一起发布。另外,我在某处读到在这种情况下最好提供伪代码,这就是我没有发布它的原因。如果你愿意,我会清理并发布它。
  • 描述是开放的解释“周围的元素”,“一起是另一个字符串的一部分”不是非常精确的描述。如果您至少可以提供更多示例,涵盖一些边界案例(例如,匹配超过 3 个单词,...)
  • 有人可以投票否决我的反对票。我更新了问题,也得到了所需的答案。

标签: python list algorithm for-loop


【解决方案1】:

只需要1个for循环:

  1. 循环迭代列表 (LST)
  2. 检查项目中是否存在 SUBSTR,如果存在则获取之前和之后的项目
  3. 构建“item-1 item item+1”(OUT)
  4. 检查是否是 MNSTR 的子字符串

【讨论】:

    【解决方案2】:

    你可以在 3 行代码中做到这一点:

    我没有完全理解你想在这里做什么,但如果这是我认为应该对你有所帮助的:

    for Item in LST:
        if SUBSTR in Item:
            return f'{SUBSTR} is in {Item}'
    

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 2015-12-12
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2021-07-02
      • 2018-07-11
      • 2017-07-08
      相关资源
      最近更新 更多