找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2982|回复: 2

[求助] 使用 append() 函数对 list 增加元素时出现错误,请教大神

1

主题

1

帖子

1

积分

贫民

积分
1
王二 发表于 2017-6-18 21:23:11 | 显示全部楼层 |阅读模式
使用for 循环和 append() 对list增加元素时,发现只添加了最后一个,并且前5个元素,被最后一个覆盖掉了。
  1. lists = [1,2,3,4,5,6]

  2. dic = {}
  3. ll = []

  4. for num in range(len(lists)):
  5.         dic['num'] = num
  6.         dic['deta'] = lists[num]
  7.         ll.append(dic)

  8. print(ll)
复制代码
输出结果,居然是:

  1. [{'num': 5, 'deta': 6}, {'num': 5, 'deta': 6}, {'num': 5, 'deta': 6}, {'num': 5, 'deta': 6}, {'num': 5, 'deta': 6}, {'num': 5, 'deta': 6}]
复制代码



帮忙看看这里是不是什么地方写的不对。




回复

使用道具 举报

0

主题

6

帖子

6

积分

贫民

积分
6
chaoshui 发表于 2017-6-18 22:13:20 | 显示全部楼层
这里是浅拷贝,所以你运行会出现这种结果了,用深拷贝就可以了,修改如下深拷贝就可以达到你预期了

  1. import copy
  2. lists = [1,2,3,4,5,6]

  3. dic = {}
  4. ll = []

  5. for num in range(len(lists)):
  6.         dic['num'] = num
  7.         dic['deta'] = lists[num]
  8.         ll.append(copy.copy(dic))
  9. print(ll)
复制代码
回复 支持 反对

使用道具 举报

0

主题

25

帖子

25

积分

贫民

积分
25
zps26 发表于 2017-6-23 08:31:25 | 显示全部楼层
估计楼主的本意是从列表制成一个字典,字典的键值不可重复的:
  1. lists = [1,2,3,4,5,6]

  2. dic = {}
  3. ll = []

  4. for num in range(0,len(lists)):
  5.         dic['num'+str(num)] = num
  6. ll.append(dic)
  7. print(ll)
复制代码


---------------------------------------------------------
[{'num0': 0, 'num1': 1, 'num2': 2, 'num3': 3, 'num4': 4, 'num5': 5}]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表