python - 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
递归切片列表的正确方法是什么?
解决方案
您可以使用循环跳过开始标记“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']
推荐阅读
- ios - React native fs无法将文件上传到API
- c# - 创建 CIMSession 时出现 System.InvalidProgramException 错误 C#
- groovy - 如何在不首先分配给变量的情况下调用 shell.parse() 上的函数?例如 shell.parse().someFunction()
- database - 在 MySQL EER-Diagram 中表示多值属性
- css - 在函数输出之后对元素选择器应用较少的函数
- react-native - React Native 如何让图片占据全屏?
- python - DNA sequence Dotplots
- r - 使用 dplyr 对 lubridate hms 进行排序
- swift - Swift 中的 Kotlin 枚举类
- owl-carousel-2 - 猫头鹰旋转木马不会在移动视图上滚动?