Python中循环后使用list.append()数据被覆盖问题的解决
前言
最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:
list = [] dic = {} for i in range(5): dic['num'] = i list.append(dic) print(id(dic)) print(list) 136652096 136652096 136652096 136652096 136652096 [{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]
结果出乎意料,并不是我们简单认为的
[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
用我自己的理解是:
如上图,每一个dic都给list一个位置,但你的dic在循环外,也就说每次循环你给的都是一个地址,dic的值改变,新一次的循环值就会覆盖上一次循环的值,list取到的值也改变。
正确做法:
list = [] for i in range(5): dic = {} dic['num'] = i list.append(dic) print(id(dic)) print(list) 138383888 136652192 138383408 138384272 138383792 [{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
正确做法是将dic放入循环内,这样每次循环都会是一个新的dic,分配不同的地址。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Python之循环结构
while循环结构 格式: while 表达式: 语句块 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断:若表达式的值为假,则跳过缩进的语句块执行. 说明: 表达式:也叫循环条件 语句块:也叫循环体 死循环:循环条件一直成立 break:跳出循环 continue:结束本次循环,进入下次循环 else:对应的语句块,循环正常退出时会执行,非正常退出(break)时不执行. for-in循环结构 说明: 也是一种循环结构,
-
python中for循环输出列表索引与对应的值方法
如下所示: list = ['a','b','c'] 想用for循环输出list的元素以及对应的索引. 代码及结果如下: 以上这篇python中for循环输出列表索引与对应的值方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
python将txt文档每行内容循环插入数据库的方法
如下所示: import pymysql import time import re def get_raw_label(rece): re1 = r'"([\s\S]*?)": "' #-------------正则表达式 reg1 = re.compile(re1) # ------------编译一下 str1 = reg1.findall(rece) return str1 def get_detail(rece): re2 = r'": "([\
-
Python创建一个空的dataframe,并循环赋值的方法
如下所示: # 创建一个空的 DataFrame df_empty = pd.DataFrame() #或者 df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D']) #添加数据 a为一个新的dataframe df_empty = df_empty.append(a) 以上这篇Python创建一个空的dataframe,并循环赋值的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
Python通用循环的构造方法实例分析
本文实例讲述了Python通用循环的构造方法.分享给大家供大家参考,具体如下: 1.交互循环 是无限循环的一种,允许用户通过交互的方式程序的特定部分: def main(): sum =0.0 count =0 moredata ='yes' #字符串 while moredata[0] =='y': #获取字符串第一个字符,true执行下面的 x =eval(input('enter a number>>')) sum =sum+x count = count +1 moredata =in
-
python中退出多层循环的方法
1.定义标记变量:利用变量值的变化退出循环 # 第一种嵌套形式 a = [[1, 2, 3], [5, 5, 6], [7, 8, 9]] # init_i = 0 # init_j = 0 flag = True for i in range(3): for j in range(3): # print(i, j) if a[i][j] == 5: flag = False init_i = i init_j = j break if not flag: break print(init_i,
-
Python在for循环中更改list值的方法【推荐】
一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] l中的元素并没有被修改 二.在for循环中更改list值的方法: 1.使用range l = list(range(10)[::2]) print (l) for i in range(len(l)): l[i] = 0 print (l
-
Python的for和break循环结构中使用else语句的技巧
在Python中的while或者for循环之后还可以有else子句,作用是for循环中if条件一直不满足,则最后就执行else语句. for i in range(5): if i == 1: print 'in for' else: print 'in else' print 'after for-loop' # in for # in else # after for-loop 但我们发现if条件在循环的过程中成立了,最终还是执行了else语句里的内容,这是为什么呢? 好的,我们这时看下面这
-
python for循环输入一个矩阵的实例
代码如下: a=[] for i in range(3): a.append([]) for j in range(3): a[i].append(int(input('输入整数:\n'))) print(a) 结果如下: 输入整数: 1 输入整数: 2 输入整数: 3 输入整数: 4 输入整数: 5 输入整数: 6 输入整数: 7 输入整数: 8 输入整数: 9 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 以上这篇python for循环输入一个矩阵的实例就是小编分享给
-
Python for循环中的陷阱详解
前言 Python 中的 for 循环和其他语言中的 for 循环工作方式是不一样的,今天就带你深入了解 Python 的 for 循环,看看它是如何工作的,以及它为什么按照这种方式工作. 循环中的陷阱 我们先来看一下 Python 循环中的「陷阱」,在我们了解了循环的工作方式后,再来看下这些陷阱到底是怎么出现的. 陷阱 1:循环两次 现在我们先假设有一个数字组成的列表,和一个用于返回这些数字的平方的生成器: >>> nums = [1, 2, 3, 4] >>> sq
随机推荐
- 无线标记语言(WML)基础之WMLScript 基础第1/2页
- xmlHttp ie6下不跨域还提示没有权限,ie8下不会有这错误
- 修改js Calendar日历控件 兼容IE9/谷歌/火狐
- 实例理解SQL中truncate和delete的区别
- struts2中action实现ModelDriven后无法返回json的解决方法
- php字符集转换
- 利用python爬取散文网的文章实例教程
- ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)
- C#创建一个小型Web Server(Socket实现)
- Android开场动画类完整实现代码
- 一些值得一看的代码asp
- 如何正确使用javascript 来进行我们的程序开发
- 用jquery的方法制作一个简单的导航栏
- js实现的星星评分功能函数
- 如何解决android Toast重复显示
- 编辑器Ueditor和SpringBoot 的整合方法
- Android放大镜的实现代码
- 详解C# 托管资源和非托管资源
- C#难点逐个击破(3):params数组参数
- Android 3D滑动菜单完全解析 Android实现推拉门式的立体特效