Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要帮助将列表中的正数乘以3,并保持其他数字不变吗_Python_List_Numbers_Multiplication - Fatal编程技术网

Python 需要帮助将列表中的正数乘以3,并保持其他数字不变吗

Python 需要帮助将列表中的正数乘以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

我的目标是将列表中的所有正数乘以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 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!