Python 需要帮助将列表中的正数乘以3,并保持其他数字不变吗
我的目标是将列表中的所有正数乘以3。我想我几乎找到了解决办法,但我不确定是什么原因导致它不起作用。它目前只返回原始数字,不将任何数字乘以3Python 需要帮助将列表中的正数乘以3,并保持其他数字不变吗,python,list,numbers,multiplication,Python,List,Numbers,Multiplication,我的目标是将列表中的所有正数乘以3。我想我几乎找到了解决办法,但我不确定是什么原因导致它不起作用。它目前只返回原始数字,不将任何数字乘以3 def triple_positives(xs): List = [] product = 3 for i in range (len(List)): if List[i] >= 0: product *= i List.append(xs[i]) return x
def triple_positives(xs):
List = []
product = 3
for i in range (len(List)):
if List[i] >= 0:
product *= i
List.append(xs[i])
return xs
您在一个空列表上迭代,该循环将尝试访问不存在的元素,更改产品,并将原始列表中未更改的元素附加到新列表中。然后返回原始的、未更改的列表。基本上,代码中几乎每一行都是错误的 您应该在输入列表上循环,并将相乘的元素附加到新列表中,然后返回新列表:
def triple_positives(xs):
List = []
product = 3
for i in xs:
if i > 0:
List.append(i*product)
return List
而且,0不是一个正数。使用>而不是>=。修改函数应该是这样的。
def triple_positives(xs):
List = []
product = 3
for i in xs:
if i > 0:
i=i*product
List.append(i)
return List
0不是正数。因此使用>而不是>=
def triple_positives(xs):
List = []
product = 3
for i in xs:
if i > 0:
i=i*product
List.append(i)
return List
但也可以这样做
def triple_positives(xs):
return [3*i if i>0 else i for i in xs ]
在代码中,存在多个问题。以下是它的更新版本及其修复程序:
>>> def triple_positives(xs):
... List = []
... product = 3
... for i in range (len(xs)):
... if xs[i] >= 0:
... List.append(xs[i]*3)
... else:
... List.append(xs[i])
... return List
...
>>> my_list = [1, 2, -1, 5, -2]
>>> triple_positives(my_list)
[3, 6, -1, 15, -2]
或者,您可以通过以下方式使用列表理解来实现此目的:
>>> [item * 3 if item > 0 else item for item in my_list]
[3, 6, -1, 15, -2]
谢谢,由于某些原因,它仍然不起作用,但您的解决方案帮助我弄清楚我需要做什么,它应该起作用。我已经从控制台复制了工作代码。检查您是否复制并粘贴了我提到的所有内容。@user757475如果它有问题,并且您已经知道了什么,那么为什么不说什么,这样它也可以在这里修复?@StefanPochmann我不太确定是什么问题代码工作正常,但它只返回相同的数字。例如,它说triple_正数[-3,-2,-1,0,1,2,3]被错误地更新为[-3,-2,-1,0,1,2,2,3],事实上我现在肯定是这样的,因为另外两个人用同样的无意义代码问了同样的问题,后者明确表示不返回。简短列表comp只是为了好玩:[2*x+absx代表xs中的x]0不是一个正数-但是无论你把它算为正数、负数还是两者都不算,0*3==0!