Python 查找具有最大乘积的数组子集

Python 查找具有最大乘积的数组子集,python,python-2.7,Python,Python 2.7,我收到了一个访谈问题,以查找具有最大乘积的数组的非空子集。我解决了这项任务,但五分之一的测试没有通过。我不明白我的解决方案可能遗漏了什么。(该任务应在python 2.7中完成) 任务如下: 我有一个整数数组,我需要返回具有最大值乘积的元素的非空子集。如果数组中有奇数个负数,则必须排除其中一个负数,以使所选乘积为正数 如果我有0在里面,一般来说,我会想排除它,也。例如:对于[2,5,-2],结果应该是10,对于[-2,-5,-1,0,2],结果应该是20 我尝试了不同的边缘情况,如[-1]、[1

我收到了一个访谈问题,以查找具有最大乘积的数组的非空子集。我解决了这项任务,但五分之一的测试没有通过。我不明白我的解决方案可能遗漏了什么。(该任务应在python 2.7中完成)

任务如下:

我有一个整数数组,我需要返回具有最大值乘积的元素的非空子集。如果数组中有奇数个负数,则必须排除其中一个负数,以使所选乘积为正数

如果我有0在里面,一般来说,我会想排除它,也。例如:对于[2,5,-2],结果应该是10,对于[-2,-5,-1,0,2],结果应该是20

我尝试了不同的边缘情况,如[-1]、[1]、[0]、[0,0,0]

解决方案如下:

from functools import reduce

def answer(arr):
    selection = [n for n in arr if n !=0 and -1000<=n<=1000]
    negative = [n for n in selection if n<0]
    if len(negative) % 2 == 1:
        selection.remove(max(negative))
    if not selection:
        return '0'
    else:
        return str(reduce(lambda x, y: x * y, selection))
从functools导入reduce
def应答(arr):

selection=[n代表arr中的n如果n!=0和-1000仔细阅读问题表明
answer([-5])
应该产生解决方案-5,因为它需要选择输入数组的非空子集。但是,您的代码返回0代表
answer([-5])

from functools import reduce

def answer(arr):
    hasZero = any([n == 0 for n in arr])
    selection = [n for n in arr if n !=0 and -1000<=n<=1000]
    negative = [n for n in selection if n<0]
    if len(negative) % 2 == 1 and (len(selection) > 1 or hasZero):
        selection.remove(max(negative))
    if not selection:
        return '0'
    else:
        return str(reduce(lambda x, y: x * y, selection))

answer([-5])
# '-5'
answer([0, -5])
# '0'
从functools导入reduce
def应答(arr):
hasZero=any([n==0表示arr中的n])

selection=[n代表arr中的n如果n!=0和-1000您有关于Python 2的面试问题吗?2020年?Python 2已经退役!@StephenRauch yep,这是真的)是对Matt Parker(NumberFile的)的面试?请注意,您对问题的大量编辑实际上使答案无法理解,因为您在原始代码中遗漏的一点是,您需要返回输入数组中至少一个元素的乘积。