【问题标题】:Delete all items in between (and including) two items in list删除列表中两个项目之间(包括)的所有项目
【发布时间】:2020-10-07 03:55:50
【问题描述】:

我正在尝试创建一个函数,该函数在列表中找到一个 1 后跟一个 2 并将其切断,包括它之间的所有内容。无论列表中有多少 1-2 部分,它都应该适用。

例如:

sumOf12([1, 2, 2, 1, 99, 99, 2])

应该有 [2] 的输出,因为前 1-2 被切断了。 numList[3]numList[6] 也是 1-2 对,所以中间的所有东西也都被切断了。

【问题讨论】:

    标签: python list function find


    【解决方案1】:

    创建一个空列表或参数“结果” 做一个while循环。可选:在退出条件下,eiter 索引 1 或 2 提供返回 -1(未找到)。

    进入while循环并搜索索引1。如果没有找到,中止并将列表添加到结果中。如果找到,则从索引 1 开始搜索索引 2。此处相同,如果未找到索引 2,则将所有内容添加到结果列表中。 如果两者都找到,则删除索引 1 之前的所有内容并将其添加到结果中。然后删除从索引 1 到索引 2 的所有内容。 继续 while 循环。

    如果您附加到结果列表,可能会有不同的选项。如果您只想将值彼此相加,则可以使用加法。如果您想在之前检查您的结果,创建一个列表似乎更好。

    可能是您想要这样的结果 [[2,3,4,1,4],[1],[2,2]] 或这样的平面列表 [2,3,4,1, 4,1,2,2]。两者都是可能的,但这取决于编程语言如何解决这个问题。

    使用有效的测试数据来检查您的结果。然后,您将查看它是否适用于每种情况。

    【讨论】:

      【解决方案2】:

      一种简单明了的方法:

      def drop_between(xs, first, last):
          include = True
          for x in xs:
              if include:
                  if x == first:
                      include = False
                  else:
                      yield x
              else:
                  if x == last:
                      include = True
      
      
      
      print(list(drop_between([1, 2, 2, 1, 99, 99, 2], 1, 2)))
      

      结果:

      [2]
      

      除了使用yield 创建生成器(然后使用list() 在列表中捕获结果),您当然可以创建一个空列表并使用.append() 添加结果。

      但是,如果遇到1 并且从未出现2,则所有以1 开头的值仍将被删除 - 也许这不是您想要的?

      即:

      print(list(drop_between([1, 2, 2, 1, 99, 99], 1, 2)))
      

      结果:

      [2]
      

      一种跟踪跳过项目的解决方案,因此如果没有找到 last 标记,它仍然可以产生那些:

      def drop_between(xs, first, last):
          skipped = []
          for x in xs:
              if not skipped:
                  if x == first:
                      skipped = [x]
                  else:
                      yield x
              else:
                  skipped.append(x)
                  if x == last:
                      skipped = []
          if skipped:
              yield from skipped
      
      
      print(list(drop_between([1, 2, 2, 1, 99, 99], 1, 2)))
      

      结果:

      [2, 1, 99, 99]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-04
        • 2021-09-09
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2012-02-01
        • 2021-01-10
        相关资源
        最近更新 更多