【问题标题】:Need help multiplying positive numbers in a list by 3, and leaving other numbers unmodified需要帮助将列表中的正数乘以 3,而其他数字保持不变
【发布时间】:2016-10-03 22:17:17
【问题描述】:

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

【问题讨论】:

    标签: python list numbers multiplication


    【解决方案1】:

    在您的代码中,存在多个问题。以下是带有修复的更新版本:

    >>> 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]
    

    或者,您可以使用 List Comprehension 来实现:

    >>> [item * 3 if item > 0 else item for item in my_list]
    [3, 6, -1, 15, -2]
    

    【讨论】:

    • 谢谢,由于某种原因它仍然无法正常工作,但您的解决方案帮助我弄清楚了我需要做什么
    • 它应该可以工作。我已经从我的控制台复制了工作代码。检查您是否复制并粘贴了我提到的所有内容。
    • @user75747475 如果它有问题并且您已经知道是什么,那么为什么不说什么,所以它也可以在这里修复?
    • @StefanPochmann 我不确定代码有什么问题,但它只是返回相同的数字。例如,它说“triple_positives([-3, -2, -1, 0, 1, 2, 3]) 错误地更新为 [-3, -2, -1, 0, 1, 2, 3]”跨度>
    • 其实我现在确定就是这样,因为两个 "other" 人用同样的废话代码(herehere)问了同样的问题,并且后者明确返回None
    【解决方案2】:

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

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

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

    另外,0 不是正数。使用> 而不是>=

    【讨论】:

      【解决方案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  ]
      

      【讨论】:

      • 短名单只是为了好玩:[2*x+abs(x) for x in xs]
      • “0 不是正数” - 但无论你将其视为正数、负数还是两者都不是,0 * 3 == 0!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 2014-03-12
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      相关资源
      最近更新 更多