【问题标题】:Implementing fuction that takes in array and multiplies each element by given int [duplicate]实现接收数组并将每个元素乘以给定 int 的函数 [重复]
【发布时间】:2018-10-11 15:54:54
【问题描述】:
def multAll(A, k):
    # takes an array of integers and an int, and multiplies each integer by the int.
    for i in A:
        i = i*k
        return i

# test 1

A = [5,12,31,7,25]
multAll(A, 10)
print(A)  # should print [50,120,310,70,250]

我在 multAll 中做错了什么,没有给我正确的答案?

【问题讨论】:

  • 实际代码中循环内的return吗?那应该是在循环之外。
  • 重申@Carcigenicate 所说的,只要函数遇到return 语句,函数就会停止...运行并返回它被告知的内容。这是这样写的,它会拉取列表的第一个元素,乘以它,然后返回值并退出函数

标签: python arrays int


【解决方案1】:

return i 在您的函数中第一次发生时,函数会停止并返回当前的i

def multAll(A, k):
    return_value = []
    for i in A:
        i = i*k
        return_value.append(i)
    return return_value

这样,一个完整的列表return_value 被创建,并且该列表被返回。

【讨论】:

    【解决方案2】:

    这会给你想要的结果:

    def multAll(A, k):
        return [i * k for i in A]
    

    它使用list comprehension 模式,允许您编辑列表中的每个元素。

    【讨论】:

    • 虽然这是一个完整且非常有效的答案,但它并没有真正以可能帮助他们学习的方式回答“我做错了什么”的 OP 问题
    • 这似乎仍然返回相同的元素 - 我的意思是,它没有乘以 10?
    • @navysoul 不,zipa 的函数将返回一个新列表,其元素已相乘。但请注意返回新列表修改旧列表之间的区别。您可以通过编写print(multAll(A, 10))B = multAll(A, 10); print(B) 来测试zipa 的代码。原列表A 不会被修改。如果你想修改旧列表而不是返回一个新列表,那就不要使用return关键字,而是写def multAll(A, k): for i in range(len(A)): A[i] = A[i] * k
    【解决方案3】:

    正如所写,你的函数应该返回给定的列表;它应该返回 A[0] * k 的值,即标量 50。

    让我们看一下代码,就像您在发布之前应该print 声明所做的那样。

    for i in A:
        # i is a local variable; it takes on the value of A[0], or 5
        i = i*k
        # i is now 50
        return i
        # You return 50 to the calling program -- which ignores the return value.
    

    此时,该函数完成,消失,退出,并且在您再次调用它之前不会再执行。

    要更改列表(您有一个列表不是一个**数组*),您可以更改每个元素。在处理完所有个元素之前不要离开函数。

    for i in range(len(A)):
        A[i] *= k
    
    return
    

    【讨论】:

      【解决方案4】:

      由于您在调用multAll 函数时没有期望返回值,因此您应该通过索引更新列表A 的项目值来就地更新列表:

      def multAll(A, k):
          for i in range(len(A)):
              A[i] *= k
      

      【讨论】:

        【解决方案5】:

        数字不是对象,所以每次 In 循环只会获取列表的下一个值。对于那个值,你做那个操作。您应该遍历索引,并将值分配给列表中的特定位置。你可以使用 range 函数来做到这一点。

        另一个问题是你在计算列表中的第一个值之后返回值,所以你应该删除一个缩进。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-15
          • 2021-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多