具有任何元素的列表的最大可能乘积
max possible product of a list with any elements
我已经制作了以下功能。但它没有通过特定的测试用例,我不知道输入是什么。此功能无法 return 最大产品的可能输入列表是什么?
输入将是数字列表,输出应该是最大可能的乘积,从列表中取出任何数字,以便乘积最大。
def max_prod(xs):
negl = []
nego = []
pos = []
prod = 1
# if any positive integer greater than 1, then dont need to consider negative integers between -1 and 0
if any(i for i in xs if i >= 1):
for i in xs :
if i <= -1 : nego.append(i)
elif i > 1 : pos.append(i)
if len(nego) % 2 == 1 :
nego.remove(max(nego))
for i in pos : prod = prod * i
for j in nego : prod = prod * j
return str(prod)
#if there is no positive integer greater than or equal to 1,
else :
l = []
for i in xs :
if i > 0 : pos.append(i)
if len(pos) != 0 : l.append(max(pos))
for i in xs :
if i <= -1 :
nego.append(i)
elif i < 0 and i > -1 :
negl.append(i)
# if there is only one negative integer lesser than -1
if len(nego) == 1 :
if len(negl) == 0:
return str(0)
else :
l.append((nego[0] * min(negl)))
return str(max(l))
# if multiple integers lesser than -1
else :
if len(nego) >= 1 and len(nego) % 2 == 1 :
nego.remove(max(nego))
for i in nego : prod = prod * i
return str(prod)
Post 请求发布的代码不起作用的极端情况。
代码为单个负数提供了错误答案。
示例:
print(max_prod([0]))
# Output: 1
答案应该是0
简单的解决方法是添加条件:
if xs == [0]:
return 0
更简单的代码
from math import prod
def max_prod(xs):
pos = [i for i in xs if i > 0]
neg = [i for i in xs if i < 0]
if len(neg) % 2:
neg.remove(max(neg))
if len(pos) > 0 or len(neg) > 0:
return str(prod(pos) * prod(neg))
return "0"
测试
for xs in [[], [0], [2], [-2], [2, 3], [0, 2, 3],
[-2, -3], [-2, -3, -4], [2, 0, -2, -3],
[2, 0, -2, -3, -1]]:
print(f'{xs} max-> {max_prod(xs)}')
输出
[] max-> 0
[0] max-> 0
[2] max-> 2
[-2] max-> 0
[2, 3] max-> 6
[0, 2, 3] max-> 6
[-2, -3] max-> 6
[-2, -3, -4] max-> 12
[2, 0, -2, -3] max-> 12
[2, 0, -2, -3, -1] max-> 12
我已经制作了以下功能。但它没有通过特定的测试用例,我不知道输入是什么。此功能无法 return 最大产品的可能输入列表是什么? 输入将是数字列表,输出应该是最大可能的乘积,从列表中取出任何数字,以便乘积最大。
def max_prod(xs):
negl = []
nego = []
pos = []
prod = 1
# if any positive integer greater than 1, then dont need to consider negative integers between -1 and 0
if any(i for i in xs if i >= 1):
for i in xs :
if i <= -1 : nego.append(i)
elif i > 1 : pos.append(i)
if len(nego) % 2 == 1 :
nego.remove(max(nego))
for i in pos : prod = prod * i
for j in nego : prod = prod * j
return str(prod)
#if there is no positive integer greater than or equal to 1,
else :
l = []
for i in xs :
if i > 0 : pos.append(i)
if len(pos) != 0 : l.append(max(pos))
for i in xs :
if i <= -1 :
nego.append(i)
elif i < 0 and i > -1 :
negl.append(i)
# if there is only one negative integer lesser than -1
if len(nego) == 1 :
if len(negl) == 0:
return str(0)
else :
l.append((nego[0] * min(negl)))
return str(max(l))
# if multiple integers lesser than -1
else :
if len(nego) >= 1 and len(nego) % 2 == 1 :
nego.remove(max(nego))
for i in nego : prod = prod * i
return str(prod)
Post 请求发布的代码不起作用的极端情况。
代码为单个负数提供了错误答案。
示例:
print(max_prod([0]))
# Output: 1
答案应该是0
简单的解决方法是添加条件:
if xs == [0]:
return 0
更简单的代码
from math import prod
def max_prod(xs):
pos = [i for i in xs if i > 0]
neg = [i for i in xs if i < 0]
if len(neg) % 2:
neg.remove(max(neg))
if len(pos) > 0 or len(neg) > 0:
return str(prod(pos) * prod(neg))
return "0"
测试
for xs in [[], [0], [2], [-2], [2, 3], [0, 2, 3],
[-2, -3], [-2, -3, -4], [2, 0, -2, -3],
[2, 0, -2, -3, -1]]:
print(f'{xs} max-> {max_prod(xs)}')
输出
[] max-> 0
[0] max-> 0
[2] max-> 2
[-2] max-> 0
[2, 3] max-> 6
[0, 2, 3] max-> 6
[-2, -3] max-> 6
[-2, -3, -4] max-> 12
[2, 0, -2, -3] max-> 12
[2, 0, -2, -3, -1] max-> 12