ValueError:max()arg为空序列,如何解决此问题

时间:2018-08-05 06:33:52

标签: python python-3.x

出现问题:

  

给出4个整数A,B,C,D,它们可以按

排列
 A B
 C D
  

则此表的表值为(A/C-B/D)
  如果我们顺时针旋转90度,那么我们有

 C A
 D B
  

则表的值为C/D -A/B

     

给出4个整数,实现一个函数表(A,B,C,D),该表返回   顺时针旋转的最小次数,最大值为   表值。

实施

实现功能table(A, B, C, D), 其中A,B,C和D是整数,而0

示例

table(1, 2 , 3 ,4) = 3

这是我的代码

def table(a, b, c, d):

    x = [[a, b, c, d], [c, a, d, b], [d, c, b, a], [b, d, a, c]]
    ans = []

    for count in range(4):
        if (x[count][2] == 0 or x[count][3] == 0) and x[count][0] != 0 and x[count][1] != 0:
            y = -(x[count][0] / x[count][1])
        elif x[count][2] != 0 and x[count][3] != 0 and (x[count][0] == 0 or x[count][1] == 0):
            y = x[count][2] / x[count][3]
        elif x[count][2] == 0 and x[count][3] == 0 and x[count][0] == 0 and x[count][1] == 0:
            y = 0
        else:
            y = x[count][2] / x[count][3] - x[count][0] / x[count][1]

        ans.append(y)
    print(ans)
    temp = ans
    for count in range(4):
        z = temp[0]
        temp.remove(temp[0])
        if z not in temp:
            return ans.index(max(ans)) + 1
    return 0


import time
x = time.time()
print(table(0, 0, 0, 0))
print(time.time() - x)

运行时,将引发以下错误:

Traceback (most recent call last):
[0, 0, 0, 0]
  File "C:/Users/lisha/PycharmProjects/untitled/lab 5 qn 2.py", line 27, in <module>
    print(table(0, 0, 0, 0))
  File "C:/Users/lisha/PycharmProjects/untitled/lab 5 qn 2.py", line 22, in table
    return ans.index(max(ans)) + 1
ValueError: max() arg is an empty sequence

Process finished with exit code 1

有人可以指出错误吗?

1 个答案:

答案 0 :(得分:0)

我还没有遍历您的代码逻辑,但是我很确定问题出在哪里

@transaction.atomic
def create(self, request, *args, **kwargs):
    with transaction.atomic():
        try:
            data = request.data
            serializer = EventSerializer(data=data)
            if serializer.is_valid(raise_exception=True):
                serializer.save()
                // recheck , this loop have input is all users in json
                for user in data.get('users'):
                    user_serializer = UserSerializer(data=user)
                    if user_serializer.is_valid(raise_exception=True):
                        user_serializer.save()
                return Response({"status": True, "results": "Evento registrado correctamente"},
                                status=status.HTTP_201_CREATED)
        except ValidationError as err:
            return Response({"status": False, "error_description": err.detail}, status=status.HTTP_400_BAD_REQUEST)

您正在设置temp来引用与ans相同的对象,因此它们是相同的。我的意思是他们实际上是一样的。那么当您从温度中删除项目时,您也会从ans中删除项目,这是副作用。为了解决这个问题,我建议使用

temp = ans

这将创建temp = ans[:] 的副本并将其分配给temp,然后当您从ans中删除时,ans不会改变。

您可以使用temp关键字so来检查是否要变量引用同一对象

is

但是

temp = ans
print(temp is ans) # True

另一件事要注意的是,这是因为列表是可变的。但是int,str和tupples并不是这样,所以有区别。