首页 > 解决方案 > Python中的递归列表切片

问题描述

我正在拼接给定列表中不需要的部分,我想递归地做。我正在努力找出基于一组标记删除某些内容的正确方法。例如,如果我有['a','b','c','d','e'],我正在尝试从 to 递归删除'b''d'这将导致['a','e'].

这是迄今为止让我最接近的东西。

lines = """
variable "ops_manager_private" {
  default     = false
  description = ""
}

variable "optional_ops_manager" {
  default = false
}

/******
* RDS *
*******/

variable "rds_db_username" {
  default = ""
}

variable "rds_instance_class" {
  default = ""
}

variable "rds_instance_count" {
  type    = "string"
  default = 0
}
"""

def _remove_set(target: list, start: str, stop: str, delete=False):
    if not target:
        return []
    elif target[0] == start:
        return target[0] + _remove_set(target[1:], start, stop, delete=True)
    elif delete is True:
        return _remove_set(target[1:], start, stop, delete=True)
    elif target[0] == stop:
        return target[0] + _remove_set(target[1:], start, stop, delete=False)
    else:
        return target[0] + _remove_set(target[1:], start, stop, delete=False)


if __name__ == __main__:
    results = _remove_set(lines.splitlines(), 'ops_', '}\n')    

然后我得到这个错误:

Traceback (most recent call last):
# large recursive traceback
TypeError: can only concatenate str (not "list") to str

递归切片列表的正确方法是什么?

标签: pythonrecursion

解决方案


您可以使用循环跳过开始标记“b”和结束标记“d”之间的元素:

items=['a','b','c','d','e']
result=[]
skip=False

for item in items:
    if item == 'b':
        skip = True
    elif not skip:
        result.append(item)
    elif item == 'd':
        skip = False

print(result)
# ['a', 'e']

推荐阅读