关于在Python的for循环中改变列表的值问题探究

2023-10-26

案例一:

def test():
    a = [1, 2]
    for i in a:
        print(i, id(a))
        if i == 5:
            break
        a = [a[0]+2, a[1]+2]
输出:
1 4313456192
2 4313269056

解释:

在for循环语句中的变量a使用的内存地址为4313456192,这个地址以及存储的值不会因为a的重新赋值而改变,换句话说就是for循环的对象是一块固定的内存地址中的值。所以循环遍历的目标始终是[1,2]。

还要注意的是id(a),每次打印的是a变量所指的内存地址,对a重新赋值是会改变a所指向的内存地址,也就是通常说的变量a只是内存地址的引用。

 案例二:

def test():
    a = [1, 2]
    for i in a:
        print(i, id(a))
        if i == 5:
            break
        a[1] = 5
        # a.append(5)
        # a.extend([3, 4])
输出:
1 4344831488
5 4344831488

解释:

明白了案例一,这个案例就不难解释了,因为for循环对象的内存地址不变,a[1] = 5表示修改这块内存地址的值。所以会输出1,5。append、extend、insert、pop操作也是同样的道理,这些操作并不会改变for循环对象的内存地址。

但要注意insert、pop的使用,如果语句体从序列中删除了当前(或之前)的一项,下一项就会被跳过(因为其标号将变成已被处理的当前项的标号)。 类似地,如果语句体在序列当前项的前面插入一个新项,当前项会在循环的下一轮中再次被处理。移步案例三。

案例三:

def test():
    a = [1, 2, 3, 5]
    for i in a:
        print(i, id(a))
        a.insert(0, 5)
        # a.pop(0)
输出:
1
1
1
1...
无限循环1

解释:

循环体会有一个内部计数器被用来跟踪下一个要使用的项,每次迭代都会使计数器递增。 当计数器值达到序列长度时循环就会终止。

 pop(0)操作时:

 所以只会输出1, 3。

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

关于在Python的for循环中改变列表的值问题探究 的相关文章

  • Pandas groupby 和描述标志 AttributeError

    我有一堆数据存储在vals 指数是单调的 但不连续 我试图对数据的直方图进行一些分析 因此我创建了以下结构 hist pd DataFrame vals hist bins pd cut vals 100 这是从实验仪器中获取的数据 我知道
  • 获得熊猫按群体连续几周的最长连续记录

    目前我正在处理不同主题的每周数据 但可能会有一些没有数据的长连续 所以 我想做的就是保留每个连续几周的最长连续id 我的数据如下所示 id week 1 8 1 15 1 60 1 61 1 62 2 10 2 11 2 12 2 13 2
  • Keras 中的 load_model 和 Lambda 层

    如何加载具有 lambda 层的模型 这是重现行为的代码 MEAN LANDMARKS np load data mean shape 68 npy def add mean landmarks x mean landmarks np ar
  • 使用seaborn,我如何在散点图上画一条我选择的线?

    我希望能够在seaborn 生成的图中画出一条符合我规范的线 我选择的图是 JointGrid 但任何散点图都可以 我怀疑seaborn可能不容易做到这一点 以下是绘制数据的代码 来自 Iris 数据集的花瓣长度和花瓣宽度的数据帧 impo
  • Django 自引用关系?

    我正在尝试创建模型页面 页面也应该能够有 子页面 我的模型代码如下使Python崩溃 http pastie org private butthk1aaeb3pmh7mmag1g在我的Mac python 2 6 1 和Ubuntu 10
  • 将鼠标悬停在 Folium 的弹出窗口中

    用这样一个简单的例子 import folium map 1 folium Map location 45 372 121 6972 zoom start 12 tiles Stamen Terrain folium Marker 45 3
  • AttributeError:“函数”对象没有属性“编译”

    我一直面临这个属性错误 有什么想法可以解决它吗 def model input shape model keras Sequential model add keras layers LSTM 64 input shape 1 9 retu
  • SQLAlchemy如何为同一个表定义两个模型

    我有一个表 其中一列是具有两个值的 varchar groupA groupB 当我创建模型时 我想实现两件事 A 组模型 包含 X 数量的相关函数 B 组模型 包含 Y 数量的相关函数 两个模型的功能并不相同 尽管它们代表了same ta
  • 如何在 Pandas 中用多个唯一字符串替换重复值?

    import pandas as pd import numpy as np data Name Tom Tom Jack Terry Age 20 21 19 18 df pd DataFrame data 假设我有一个如下所示的数据框
  • 在ubuntu中安装pyinterval

    我正在尝试安装 python 库 pyinterval 它需要 crlibm C 标头 我已安装该标头 没有错误 但似乎是问题的根源 当我跑步时 sudo easy install pyinterval 我得到以下信息 Searching
  • 如何在Tensorflow中读取json文件?

    我正在尝试编写一个函数 用于读取张量流中的 json 文件 json 文件具有以下结构 bounding box y 98 5 x 94 0 height 197 width 188 rotation yaw 27 970195770263
  • mypy 错误,使用 Union/Optional 重载,“重载函数签名 1 和 2 与不兼容的返回类型重叠”

    那么 让我们从一个例子开始 假设我们有几种可以组合在一起的类型 假设我们正在使用 add 来实施这一点 不幸的是 由于我们无法控制的情况 一切都必须是 可为空的 因此我们被迫使用Optional到处 from typing import O
  • 我可以使用对象(类的实例)作为 Python 中的字典键吗?

    我想使用类实例作为字典键 例如 classinstance class dictionary classinstance hello world Python似乎无法将类作为字典键处理 还是我错了 另外 我可以使用像 classinstan
  • 在 SQLAlchemy 中删除父级后删除子级

    我的问题如下 我有两个型号Entry and Tag通过 SQLAlchemy 中的多对多关系链接 现在我想删除所有Tag没有任何对应的Entry后Entry被删除 示例来说明我想要的内容 Entry 1带标签python java Ent
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • Python Selenium 将内容添加到 pandas 数据帧

    我正在尝试循环list用于抓取内容的邮政编码this url http kadastralekaart com 但我面临着错误 例如TimeoutException and StaleElementReferenceException 我该
  • MySQL:进行基本搜索

    我的数据库中有一个名称表 我希望对其进行模糊搜索 例如我的数据库包含 Name ID John Smith 1 Edward Smith 2 Gabriel Gray 3 Paul Roberts 4 目前 当我通过 python 搜索数据
  • 命名空间与常规包

    命名空间 Python 包之间有什么区别 没有 init py 和一个常规的Python包 有一个 init py 特别是当 init py普通包裹是空的吗 我很好奇 因为最近我忘记了 init py在我制作的包中 我从未注意到任何问题 事

随机推荐

  • CVPR 2021 人脸编辑GAN汇总

    点击上方 机器学习与生成对抗网络 关注星标 获取有趣 好玩的前沿干货 1 Exploiting Spatial Dimensions of Latent in GAN for Real time Image Editing 生成对抗网络 G
  • Vue项目引入Echarts可视化图表库教程&踩坑

    Apache ECharts是一个基于 JavaScript 的开源可视化图表库 ECharts是一款基于JavaScript的数据可视化图表库 提供直观 生动 可交互 可个性化定制的数据可视化图表 ECharts最初由百度团队开源 并于2
  • AD如何设置单个元器件规则

    在我们使用AD进行PCB绘制时 有时候可以将两个元器件重叠放置 但这时由于规则设置的原因 导致DRC检检查报错 那么如何将这种报错解决呢 一 在英文模式下 按下T M 忽视掉这个检查 但这种方法一旦移动元器件又会显示报错 二 设置单个元器件
  • 负载均衡器ribbon和LoadBalancer

    负载均衡器ribbon和LoadBalancer 客户端负载均衡器 目前主流的负载方案分为以下两种 集中式负载均衡 在消费者和服务提供方中间使用独立的代理方式进行负载 有硬件的 比如 F5 也有软件的 比如 Nginx 客户端根据自己的请求
  • 测试key-value

    package com datacloudsec test collect import com alibaba fastjson JSON import com datacloudsec UEBAApplication import co
  • 【ERROR】本地计算机上的mysql服务启动停止后 Windows下mysql数据库恢复

    MySQL突然连不上的 提示 本地计算机上的mysql服务启动停止后 某些服务在未由其他服务或程序使用时将自动停止 折腾半天网上各种查 才找到方法完美解决 数据库恢复 步骤1 删除原有mysql服务 mysqld remove lt 你的m
  • 面向应用学习stm32(7)-TIM通用定时器-PWM输出和输入

    前导 本文的目的与 意在于面向应用的学习单片机 故不会涉及太多的原理知识 例如寄存器之类的 主要目的在于面向应用的学习单片机 学会单片机的基础用法 开发板采取野火的指南者f103 作者大二小白 写的不好的地方轻点喷 欢迎评论区交流 全部工程
  • 常见的函数式接口介绍

    Supplier
  • linux环境下python编程指南,在Linux系统中搭建Python编程环境

    Linux系统是为编程而设计的 因此在大多数Linux计算机中都默认安装了Python 1 检查Python版本 在系统中运行应用程序Terminal 如果是Ubuntu 可按Ctrl Alt T 打开终端窗口 通过执行python 注意是
  • [学习opencv]彩色图像通道分离、合成

    将彩色图像RGB三色分离出来是一个很有意义的操作 用到void split const Mat mtx vector
  • LeetCode 61. 旋转链表

    题目链接 61 旋转链表 一共用两个指针 第一个记录链表的尾节点 第一次遍历记录链表的长度 由于k可能很大所有我们对k模上n 第二次遍历记录我们用第二个指针记录要翻转的第二段链表的前一个节点 然后用尾部指针tail的next指针指向头结点
  • (超详细)基于MTCNN+FaceNet实现人脸识别及轻量级网络探索和改进(附数据集及预训练模型)

    目录 一 原理分析 二 FcaeNet源码使用 三 爬虫自制数据集 提高亚洲人脸准确率 四 加载预训练模型 五 加载自制pairs验证文档 六 轻量级网络研究 七 FaceNet扩展使用 FaceNet SVM KNN或者改进损失函数 八
  • Windows安装Linux虚拟机详细教程

    文章目录 一 VirtualBox安装 二 Vagrant安装 三 Centos安装 在线安装 离线安装 四 启动与连接 方式一 命令行登入 无需输入用户名与密码 方式二 Xshell登入 自定义ip 一 VirtualBox安装 下载 V
  • raid技术快速入门

    RAID技术 简介 raid全称为Redundant Arrays of Independent Drives 即磁盘冗余阵列 这是由多块独立磁盘 多为硬盘 组合的一个超大容量磁盘组 Raid技术意图在于把多个独立的磁盘设备组成一个容量更大
  • linux配置网络yum源

    yum是Linux环境安装软件包的一种方式 yum仓库用来存放所有的现有的 rpm包 当使用yum安装一个rpm包时 需要依赖关系 会自动在仓库中查找依赖软件并安装 yum仓库可以是本地的 也可以是HTTP FTP nfs形式的网络仓库 简
  • 运放的相位补偿 ?

    两个作用 1 改变反馈网络相移 补偿运放相位滞后 2 补偿运放输入端电容的影响 其实最终还是补偿相位 因为我们所用的运放都不是理想的 一般实际使用的运算放大器对一定频率的信号都有相应的相移作用 这样的信号反馈到输入端将使放大电路工作不稳定甚
  • 华为***技术一:L2TP概述

    原理名词解析 VPDN VPDN是承载PPP报文的 可以为企业 小型ISP 移动办公人员提供接入服务 NAS NAS网络接入服务器 Network Access Server 主要由ISP维护 连接拨号网络 是距离PPP终端地理位置最近的接
  • 小程序开发一个多少钱啊

    在今天的数字化时代 小程序已经成为一种非常流行的应用程序形式 由于它们的便捷性 易用性和多功能性 小程序吸引了越来越多的用户和企业 但是 很多人在考虑开发一个小程序时 都会遇到同一个问题 开发一个小程序需要多少钱 小程序的开发费用因人而异
  • angular 使用前端代理方式实现请求跨域,解决代理不生效问题!!

    最近玩angular 在使用代理方式进行前端跨域处理时 一直无法代理成功 查了许多资料 发现所有angular跨域教程都不完整 下边为大家奉上完整版的跨域操作 1 在项目根目录下定义proxy config json文件 2 在第1步刚刚创
  • 关于在Python的for循环中改变列表的值问题探究

    案例一 def test a 1 2 for i in a print i id a if i 5 break a a 0 2 a 1 2 输出 1 4313456192 2 4313269056 解释 在for循环语句中的变量a使用的内存