反转列表中的数字符号

时间:2019-01-04 07:52:32

标签: python jupyter-notebook

我想创建一个函数,其中一个传递一个数字列表,然后返回另一个列表,其中所有数字的符号都反转。这是我的代码:

def reverse_sign_of_nos_in_a_list(list1):
    """ This function reverses sign of numbers
        in a list and returns a list.
    """
    list2 = []
    for num in list1 :
        if num > 0 :
            return list2.append(num * -1)
        elif num < 0 :
            return list2.append(abs(num))
        else :
            return list2.append(num)

print (reverse_sign_of_nos_in_a_list([1,2,3,-1,-2,-3,0]))

以上代码显示None作为输出。有什么问题吗?

7 个答案:

答案 0 :(得分:4)

这是您的代码有几处错误:

  1. 您的代码的每个分支中都有一个return语句。这意味着无论如何,您都将从循环的第一次迭代中返回。
  2. list.append修改目标实例。与Python中此类方法的常规用法一样,它返回None,再加上#1意味着您始终会得到None的返回值。

您的代码还有一些很奇怪的东西。乘以-1即可翻转正数的符号。那讲得通。但是,您将取负数的绝对值。为什么?翻转符号与将负数乘以-1相同。甚至是零。

实际上,您甚至不需要乘以-1。已经有一个“翻转符号”运算符:一元-

您可以将函数编写为单个列表理解:

def reverse_sign_of_nos_in_a_list(list1):
    return [-x for x in list1]

答案 1 :(得分:1)

reverse_sign_of_nos_in_a_list返回None,因为list.append()返回None,而不是附加列表

以下应做的工作:

def reverse_sign_of_nos_in_a_list(list1) :
    """ This function reverses sign of numbers
        in a list and returns a list.
    """
    list2 = []
    for num in list1 :
        if num > 0 :
            list2.append(num * -1)
        elif num < 0 :
            list2.append(abs(num))
        else :
            list2.append(num)
    return list2

答案 2 :(得分:1)

list.append()方法将在原位置附加新元素,然后返回None。因此,您的函数将返回None。同样,它将在处理原始列表的第一个元素后立即返回。

def reverse_sign_of_nos_in_a_list(list1):
    """ This function reverses sign of numbers
        in a list and returns a list.
    """
    list2 = []
    for num in list1:
        if num > 0:
            list2.append(num * -1)
        elif num < 0:
            list2.append(abs(num))
        else:
            list2.append(num)
    return list2

print(reverse_sign_of_nos_in_a_list([1,2,3,-1,-2,-3,0]))

请注意,我将代码保持与原始代码尽可能接近。我会以不同的方式实现该功能。

答案 3 :(得分:0)

您需要追加然后返回列表。

list2.append(...)
return list2

获得None作为输出的原因是因为append是一个不返回值的void方法。它只会更改list2。

答案 4 :(得分:0)

因为list.append(elem)-在列表的末尾添加一个元素。常见错误:不返回新列表,仅修改原始列表

您应该使用类似于:

def reverse_sign_of_nos_in_a_list(list1) :
    """ This function reverses sign of numbers
        in a list and returns a list.
    """
    list2 = []
    for num in list1 :
        if num > 0 :
            list2.append(-num)
        elif num < 0 :
            list2.append(abs(num))
        else:
            list2.append(num)
    return list2

print(reverse_sign_of_nos_in_a_list([1,2,3,-1,-2,-3,0]))

答案 5 :(得分:0)

如果您希望反转列表中的每个元素,则应删除所有导致该函数过早返回的返回。

代码

Private Function GreaterThan9Hours(ByVal StartTime As DateTime, ByVal EndTime As DateTime) As Boolean
    If EndTime - StartTime > TimeSpan.FromHours(9) Then
        Return True
    Else
        Return False
    End If
End Function

答案 6 :(得分:0)

一种用于整个过程的不同,更短(以及更多的pythonic)方式:

def reverse_sign_of_nos_in_a_list(list1):
    return [(-1)*ii for ii in list1]