python - 用户定义的函数似乎是过去输入的两倍

标签 python

使用我当前设置的代码,值似乎翻倍,我无法查明原因。

例如,我通过函数运行数组(E)并得到[5.569, 10.9536, 16.167, ...]然后当我稍后使用数组(G)再次运行该函数时突然(E) 现在将读取 [11.137, 21.90721, 32.3342, ...]

这些数字似乎是数组最初的数字和应该的数字的两倍。下面是正在使用的功能?出了什么问题??

脚本1:

    E = PyFunctions.za(c_v, 4)
    F = PyFunctions.za(c_v, 6)
    G = PyFunctions.zb(E, F, 2)

脚本2:

    def zb(e1, e2, p):
    l1 = len(e1)
    l2 = len(e2)

    if l1 > l2:
        e1 = e1[(-1 - l2) + 1:]
    elif l2 > l1:
        e2 = e2[(-1 - l1) + 1:]

    e1p = e1
    e1p[:] = [x * p for x in e1p]
    e2p = e2
    e2p[:] = [x * (p - 1) for x in e2p]

    z = [0] * len(e1p)

    for k in range(len(e1p)):
        z[k] = e1p[k] - e2p[k]
    return z

最佳答案

这是 Python aliasing 的效果。因为您将 E 作为 e1 传递给 zb(),所以 e1 正是 E,并在您所说的行上:

e1p = e1

您正在 e1e1p 之间建立别名关系,从而在 Ee1p 之间建立别名关系。然后,在下一行将 e1p 中的每个元素乘以 p:

e1p[:] = [x * p for x in e1p]

您实际上是在 E 上执行该操作(由于别名),因此 E 中的每个元素都将乘以 p > (您以 2 的形式传入),这就是 E 被加倍的原因。

如果您只想将 E副本传递到 zb() 中,则可以替换脚本 1 中的第三行与此:

G = PyFunctions.zb(E[:], F, 2)

关于python - 用户定义的函数似乎是过去输入的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650387/

相关文章:

python - 生成给定总和的随机(int)列表python

python - 迭代列表的有效方法?

python - flask 棉花糖去掉小数点

python - 来自图像 : OCR-Python 的验证码中断或文本阅读器

python - 使用 df.barplot 时 python 条形图中的颜色

python - brew安装某些软件包时如何不自动更新 Homebrew 软件?

javascript - 在 Django 中使用 ajax POST 请求

Python:defaultdict 在 2.6 中成为不可编码的对象?

python - 从配置文件或数据库中读取 Colander Schema

python - Pandas - 获取行匹配条件的列值