我想创建一个函数,其中一个传递一个数字列表,然后返回另一个列表,其中所有数字的符号都反转。这是我的代码:
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
作为输出。有什么问题吗?
答案 0 :(得分:4)
这是您的代码有几处错误:
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]