Python 缩短多重布尔运算以对两个已排序列表进行排序
我编写以下递归解决方案来合并两个列表: 基本情况如下: 1) 断言两个列表都为空 2) 仅断言一个列表不为空 3) 减少外壳以移除元件 4) 递归案例Python 缩短多重布尔运算以对两个已排序列表进行排序,python,Python,我编写以下递归解决方案来合并两个列表: 基本情况如下: 1) 断言两个列表都为空 2) 仅断言一个列表不为空 3) 减少外壳以移除元件 4) 递归案例 def合并(l1、l2): """ :rtype:List """ 全球资源 res=[] #基本情况 #1断言为空 如果len(l1)=0且len(l2)=0:# 返回res #2请不要空着一个 如果len(l1)=0且len(l2)!=0: 返回res.extend(l2) 如果len(l1)!=0和len(l2)=0: 返回资源扩展(l1)
def合并(l1、l2):
"""
:rtype:List
"""
全球资源
res=[]
#基本情况
#1断言为空
如果len(l1)=0且len(l2)=0:#
返回res
#2请不要空着一个
如果len(l1)=0且len(l2)!=0:
返回res.extend(l2)
如果len(l1)!=0和len(l2)=0:
返回资源扩展(l1)
#3在两个表中都插入一个元素
如果len(l1)=1且len(l2)=1:
如果l1[0]
至于#2断言,只有一个不是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)
def合并(l1、l2)
如果不是全部(l1,l2):#当l1或l2为空时触发
返回l1+l2#没有理由不连接空列表
elif len(l1)==1和len(l2)==1:
#三值if语句
如果l1[0]
您可以通过使用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)
def合并(l1、l2)
如果不是全部(l1,l2):#当l1或l2为空时触发
返回l1+l2#没有理由不连接空列表
elif len(l1)==1和len(l2)==1:
#三值if语句
如果l1[0]
如果len(l1)*len(l2)==0,则可以执行:返回res.extend(l1).extend(l2)
。这应该是可行的,因为如果只有一个是空的,您仍然需要另一个,扩展空列表将不会起任何作用,因此您将得到相同的结果。如果len(l1)*len(l2)==0,则可以执行:返回res.extend(l1)。extend(l2)
。这应该是可行的,因为如果只有一个是空的,那么您仍然需要另一个,而扩展空列表将不会起任何作用,因此您将得到相同的结果。