取两个表的最小值



我想创建一个函数compare_lists,它接受两个列表作为参数(可以为空)。它应该符合以下条件:

  1. 如果两者都为空,函数应该不返回任何值
  2. 如果第一个列表为空,第二个列表为空,则返回-1
  3. 如果第一个列表不为空,但第二个列表为空,则返回1
  4. 如果两者都不为空,并且第一个列表的最小值小于第二个列表的最小值返回1,否则返回-1。

我的代码如下:

def compare_lists(list_1, list_2):
if (len(list_1) > 0) and (len(list_2) == 0):
return 1
elif (len(list_1) == 0) and (len(list_2) > 0):
return -1
elif (len(list_1) > 0) and (len(list_2) > 0):
if np.min(list_1) < np.min(list_2):    
return 1
else:
return -1

使用示例

list_1 = []
list_2 = [2, 3, 4]
print(compare_lists(list_1, list_2))
-1
list_1 = [1, 3, 8]
list_2 = [2, 3, 4]
print(compare_lists(list_1, list_2))
1

我的问题是-你认为它可以更容易地完成,而不是应用这么多条件?

较少ifs和elses的较短路线为:

def compare_lists(list1, list2):
if len(list1) != 0 and (len(list2) == 0 or min(list1) < min(list2)):
return 1
elif len(list2) != 0:
return -1

可能不太好读…

我更喜欢可读性而不是简洁性。我将这样写:

>>> def compare_lists(l1, l2):
...     if not l1 and l2: return -1
...     if l1 and not l2: return 1
...     if l1 and l2:
...         if min(l1) < min(l2):
...             return 1
...         else:
...             return -1
...
>>> list_1 = []
>>> list_2 = [2, 3, 4]
>>> print(compare_lists(list_1, list_2))
-1
>>> list_1 = [1, 3, 8]
>>> list_2 = [2, 3, 4]
>>> print(compare_lists(list_1, list_2))
1

可读性较差,但行数较少(如果这就是您所说的"更容易")

def compare_lists(l1, l2):
d = {(False, False): None, (True, False): 1, (False, True): -1}
if (bool(l1), bool(l2)) in d: return d[(bool(l1), bool(l2))]
return (1 if min(l1) < min(l2) else -1)

相关内容

  • 没有找到相关文章

最新更新