如何在列表中的每个连续零运行中删除除x之外的所有零?

b_r*_*on_ 4 python list del

对于xPython中列表中的每个连续或更多的零运行,我想在运行中除了x它们之外全部为零.如果x = 0,则删除全部为零.

我在考虑一个Python函数,它将列表L和数字x作为输入.

例如,让我们L = [7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8].

  • 如果x = 0,那么回来L = [7, 12, 2, 27, 10, 8]
  • 如果x = 1,那么回来L = [7, 0, 12, 0, 2, 0, 27, 10, 0, 8]
  • 如果x = 2,那么回来L = [7, 0, 12, 0, 0, 2, 0, 0, 27, 10, 0, 0, 8]
  • 如果x = 3,那么回来L = [7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 8]
  • 如果x = 4,则返回L = [7, 0, 12, 0, 0, 2, 0, 0, 0, 27, 10, 0, 0, 0, 0, 8](与原始相同L)
  • 如果x >= 5,则返回原始L,因为没有连续5个或更多个零的运行.

任何帮助将是真诚的感谢.

Blc*_*ght 8

这很容易作为发电机.list如果您想要删除零运行的新列表,请在构造函数中包含对它的调用.

def compact_zero_runs(iterable, max_zeros):
    zeros = 0
    for i in iterable:
        if i == 0:
            zeros += 1
            if zeros <= max_zeros:
                yield i
        else:
            zeros = 0
            yield i
Run Code Online (Sandbox Code Playgroud)