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

2021-10-17 18:08:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是把列表中所有的正数乘以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
3条回答
网友
1楼 ·

您在一个空列表上进行迭代,该循环将尝试访问不存在的元素,更改product,并将原始列表中未更改的元素附加到新列表中。然后返回原始的、未更改的列表。基本上,代码中几乎每一行都是错误的。你知道吗

您应该在输入列表上循环,并将相乘的元素附加到新列表中,然后返回新列表:

def triple_positives(xs):
    List = []
    product = 3
    for i in xs:
        if i > 0:
            List.append(i*product)
    return List

而且,0不是正数。用>代替>=。你知道吗

网友
2楼 ·

在您的代码中,存在多个问题。以下是它的更新版本和修复程序:

>>> 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]
网友
3楼 ·

修改你的函数应该是这样的。 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  ]

相关问题