我想创建一个函数compare_lists
,它接受两个列表作为参数(可以为空)。它应该符合以下条件:
- 如果两者都为空,函数应该不返回任何值
- 如果第一个列表为空,第二个列表为空,则返回-1
- 如果第一个列表不为空,但第二个列表为空,则返回1
- 如果两者都不为空,并且第一个列表的最小值小于第二个列表的最小值返回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
我的问题是-你认为它可以更容易地完成,而不是应用这么多条件?
较少if
s和else
s的较短路线为:
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)