函数修改列表

2023-12-03

def make_Ab(A,b):
    n = len(A)
    Ab = list(A)
    for index in range(0,n):
        Ab[index].append(b[index][0])
    print(A)
    return Ab.copy()

A = [[0.0, 1.0, 1.0, 2.0], [1.0, 3.0, 1.0, 5.0], [2.0, 0.0, 2.0, 4.0]]

b = [[1],[2],[3]]

print(A)

[[0.0, 1.0, 1.0, 2.0], [1.0, 3.0, 1.0, 5.0], [2.0, 0.0, 2.0, 4.0]]

Ab = make_Ab(A,b)
print(A)

[[0.0, 1.0, 1.0, 2.0, 1], [1.0, 3.0, 1.0, 5.0, 2], [2.0, 0.0, 2.0, 4.0, 3]]

我不明白为什么我的函数会修改我的原始列表。我没有指定A作为函数中的全局(我什至尝试在不同的函数中声明它,因此它不会是全局的),我没有通过引用传递它(例如Ab = A)。有什么问题?


这里的问题是,虽然您没有修改variable(你不能没有它global), you are修改value.

一开始这可能有点令人困惑。这两个看起来像是做同样的事情:

>>> a = [1, 2, 3]
>>> a = a + [1]
>>> a
[1, 2, 3, 1]
>>> a = [1, 2, 3]
>>> a.append(1)
>>> a
[1, 2, 3, 1]

但他们不是。第一个是制作一个新列表a and [1]然后将该新列表绑定回名称a。如果同一列表有其他引用,则该列表将保持不变。另一方面,第二个是更改实际的列表对象a名称。如果同一个列表有其他参考,它就会改变。

>>> a = [1, 2, 3]
>>> b = a
>>> a = a + [1]
>>> b
[1, 2, 3]
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(1)
>>> b
[1, 2, 3, 1]

您在代码中执行的是第二项操作,即更改列表对象的值。这意味着对该列表对象的每个引用,即使是您无权访问的名称,也会看到更改。

但你不修改A本身,你正在修改list(A)。那不应该是列表的新副本吗?

是的,确实如此——但是,即使Ab是一个不同的列表A, Ab[0]仍然是相同的列表A[0]。您创建了一个新列表,该列表引用与原始列表相同的子列表。所以当你改变这些子列表时......同样的问题。

如果您想更改此设置,可以执行以下两项操作之一:

  • 复制函数顶部的所有子列表以及列表,以便更改副本而不是原始列表。
  • 不要对列表使用任何变异操作;建造一个新的。

第一个是一个简单的更改:而不是Ab = list(A), do Ab = copy.deepcopy(A) or Ab = [list(sub) for sub in Ab].

第二个需要稍微重写你的代码:

def make_Ab(A,b):
    n = len(A)
    Ab = []        
    for index in range(0,n):
        Ab.append(A[n] + [b[index][0]])
    return Ab

(或者,当然,您可以将其重写为列表理解。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数修改列表 的相关文章

随机推荐

  • 如何查找 SQL Server Management Studio 的服务器名称

    我安装了 Microsoft SQL Server 2008 当我启动 SQL Server Management Studio SSMS 时 我得到Connect to Server带有空白文本框的登录窗口Server name 我尝试了
  • 在 mysql 8 中使用 GROUP BY

    我已经升级了 MySQL 服务器 现在我遇到了 group by 问题 select from tickets WHERE status 0 group by tnumber ORDER BY created at DESC 错误是 SEL
  • mllib NaiveBayes 中的类数量有限制吗?调用 model.save() 时出错

    我正在尝试训练一个模型来预测文本输入数据的类别 我使用以下方法遇到了似乎数值不稳定的问题pyspark ml classification NaiveBayes当类别数量超过一定数量时 对词袋进行分类 在我的现实世界项目中 我有大约 10
  • Javascript for 循环和警报

    我正在循环浏览链接列表 我可以正确获取标题属性 并希望它在单击时显示 当页面加载并单击链接时 所有链接标题都会一一提醒 我究竟做错了什么 function prepareShowElement var nav document getEle
  • 仅在 apex 报告的某些行上显示“编辑”链接

    我有以下报告结构 显示全年产品的销售目标和销售额 每个产品都有两行 一行显示销售额 一行显示 sales target 目前 我的报告在报告的每一行旁边都有一个编辑链接 有没有办法从 sales target 行中删除编辑链接 select
  • 无法使用 PRAW 从某些 Reddit 子版块中获取随机帖子

    我正在尝试使用此代码让一个不和谐的机器人从reddit发送图像 只是为了抓取而不是发送 def random post subreddit while True post reddit subreddit subreddit random
  • Android:如何获取自定义View的高度和宽度? [复制]

    这个问题在这里已经有答案了 我该如何使用getMeasuredWidth and getMeasuredHeight 它总是返回 0 这和有什么区别getHeight and getWidth 刚刚找到了获取自定义视图的高度和宽度的解决方案
  • SQLite中保存资源路径

    我需要将图像保存在 SQLite 数据库的资源文件夹中 该数据库是预加载的 复制到数据 路径 因此在运行时不会填充 我尝试将其保存在 SQLite 的文本字段中 R drawable picture1 我的drawable文件夹中有大约30
  • MySQL FULLTEXT 不适用于多个字段

    我有一个标准的 MySQL 全文查询 如下所示 SELECT FROM accounts WHERE MATCH first name username AGAINST stringhere 问题是 它找不到该字段的全文索引first na
  • 通过 jQuery 添加 JSF 标签/组件

    这是我所做的 var a document getElementById panelForm tableId01
  • NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path

    我正在尝试在 NSIS 安装程序中加载并调用 C 库 DLL 的函数 当我尝试加载 DLL 时 发出错误 126 ERROR MOD NOT FOUND 这是我用来测试的最小安装程序脚本 OutFile Main exe ShowInstD
  • 如何配置Json.NET自定义序列化?

    由于我无法控制的原因 我从外部服务返回的数据被格式化为字符串数组的数组 string one string two 我试图将其反序列化为具有两个属性的对象 public class MyObject public string Proper
  • ajax 调用导致错误而不是成功

    在我的 ASP net mvc3 项目中 我使用 ajax 调用将 json 数据发送到控制器公司中的创建操作方法 但是当我调试ajax调用时 它总是以错误结果而不是成功结果结束 阿贾克斯调用 ajax url Company Create
  • 在javascript中移动对象元素位置

    我正在尝试找到一种将对象元素移动到特定位置的方法 例如 我有这个对象 element1 object element2 element3 我搜索将 element3 移动到第一个位置 element3 element1 element2 感
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • 如何为等待函数调用添加超时

    向等待函数添加超时的最佳方法是什么 Example lets pretend this is in a library that I m using and I can t mess with the guts of this thing
  • 按平均值排名的箱线图

    我想显示多个变量的箱线图 并按列均值降序排列它们 就像在绩效分析包裹 我使用以下代码生成箱线图 zx lt replicate 5 rnorm 50 zx means lt colMeans zx na rm TRUE boxplot zx
  • django 和 facebook:代表用户执行第三方登录的 facebook web 应用程序的安全性和设计

    我正在编写一个 Facebook 画布 Web 应用程序 它执行对第三方网站的登录 使用 urllib 并代表用户执行操作 这意味着我有2个账户 用户在我的网络应用程序中拥有的帐户 通过 facebook 以及应用程序用来代表他们执行登录的
  • Android Parcelable 对象返回 Null

    我有产品类 我想将产品对象从一项活动传递到另一项活动 我已经这样实现了 public class Product implements Parcelable private double availableQuantity private
  • 函数修改列表

    def make Ab A b n len A Ab list A for index in range 0 n Ab index append b index 0 print A return Ab copy A 0 0 1 0 1 0