为了账号安全,请及时绑定邮箱和手机立即绑定

关于python中for循环的问题?

关于python中for循环的问题?

森栏 2019-05-23 11:30:15
最近在做数据分析的练习时,对一段python代码中的for循环不是很理解,代码如下:print('修正数据类型(数据清理)')importunicodecsvfromdatetimeimportdatetimeasdtdefread_csv(filename):withopen(filename,'rb')asf:reader=unicodecsv.DictReader(f)returnlist(reader)defparse_date(date):#将字符串的date转换成python的日期时间对象ifdate=='':#检查日期是否为空字符串returnNoneelse:returndt.strptime(date,'%Y-%m-%d')#将字符串解析成日期daily_engagement=read_csv('daily-engagement.csv')print(daily_engagement[0])#清理engagement的数据类型forengagement_recordindaily_engagement:engagement_record['utc_date']=parse_date(engagement_record['utc_date'])print('\n每日参与学生数据:')print(daily_engagement[0])结果输出如下:修正数据类型(数据清理)OrderedDict([('acct','0'),('utc_date','2015-01-09'),('num_courses_visited','1.0'),('total_minutes_visited','11.6793745'),('lessons_completed','0.0'),('projects_completed','0.0')])每日参与学生数据:OrderedDict([('acct','0'),('utc_date',datetime.datetime(2015,1,9,0,0)),('num_courses_visited','1.0'),('total_minutes_visited','11.6793745'),('lessons_completed','0.0'),('projects_completed','0.0')])在读取了daily-engagement.csv文件后,打印变量daily_engagement[0]时,('utc_date','2015-01-09')中的日期还只是字符串我的问题是,在对变量daily_engagement进行遍历后,为什么在打印同样的daily_engagement时,里面的utc_date就变成了datetime.datetime(2015,1,9,0,0)?我在看这个for循环的时候只看出了对变量engagement_record作了修改,看不出有对daily_engagement作赋值之类的操作,但却能够打印修改后的结果请大神指教个中原理,谢谢!
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

foriin[v1,v2,v3]:i记录的是变量v*的地址,如果变量是字符串,修改i,v*没有变化,如果变量是列表,那么v1[0]===i[0]他们共用一个地址,
#!/usr/bin/python3
a=[[1,2],[1,2],[1,2],[1,2],[1,2]]
foriina:
i[0]=5
print(a)
                            
查看完整回答
反对 回复 2019-05-23
?
杨魅力

TA贡献1811条经验 获得超6个赞

daily_engagement是一个list,保留了对每一个engagement_record的引用。
前后两次engagement_record[0]取得都是同一个engagement_record,是这个engagement_record中的一个字段被改变了。
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信