python - 缩短多个布尔运算以对两个排序列表进行排序
问题描述
我编写了以下递归解决方案来合并两个列表:
基本情况是:
1)断言两个列表都为空
2)断言只有一个列表不为空
3)减少大小写以删除元素
4)递归案例
def merge(l1, l2):
"""
:rtype: List
"""
global res
res = []
#Base Cases
#1 assert empty
if len(l1) == 0 and len(l2) == 0: #
return res
#2assert one not empty
if len(l1) == 0 and len(l2) != 0:
return res.extend(l2)
if len(l1) != 0 and len(l2) = 0:
return res.extend(l1)
#3assert one element in both
if len(l1) = 1 and len(l2) = 1:
if l1[0] < l2[0]:
res.append(l1.pop())
res.append(l2.pop())
else:
res.append(l2.pop())
res.append(l1.pop())
return res
#4recur case
else:
return merge(l1, l2)
至于#2 assert only one is not emtty
, 很麻烦,
怎样才能让逻辑清晰简洁呢?
解决方案
all()
您可以通过使用/和列表推导来缩短代码any()
,并且不使用单独的变量res
:
def merge(l1, l2)
if not all(l1, l2): # triggers when either l1 or l2 is empty
return l1 + l2 # no reason not to just concatenate an empty list
elif len(l1) == 1 and len(l2) == 1:
# ternary if statement
return [l1.pop(), l2.pop()] if l1[0] < l2[0] else [l2.pop(), l1.pop()]
else:
return merge(l1, l2)
推荐阅读
- python - [Keras]创建模型时出现了一些问题
- python - selenium python等待超时异常,之前它曾经工作过
- javascript - NetBeans 语法高亮、VueJS 单文件组件和 pug
- algorithm - 为什么我们不通过它们的中值复杂度来评估算法
- ios - 不能向 RightBarButtonItems 添加多个 UIBarButtonItem
- javascript - 如果来自 api 的响应为假,如何停止 for 循环?
- nginx - nginx反向代理背后的GitLab
- java - 使用 GSON 序列化时出现“声明多个 JSON 字段命名”错误
- javascript - 创建 Unity3d 脚本时不显示“Javascript”项
- jquery - 在 Fullcalendar 中添加 1 小时的 slotLabelFormat