本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-10(9)

2020-11(19)

【python学习】-用循环在列表中添加元素(避免最后列表元素都是只跟最后一个添加的一样)

发布于2021-10-04 21:28     阅读(1066)     评论(0)     点赞(15)     收藏(4)



用循环在列表中添加元素


最近在进行数据处理,需要通过计算得到数据,再将数据用来绘图,其中还要取出个别数据进行处理。因此数据与数据之间存在嵌套,为了更好地调用数据,决定 使用列表来存储数据,这样在后期调用数据时就可以用 遍历列表的方法进行调用。
本次数据存储主要是以下过程:
过程一:计算得到数据一维列表 [ ](假设有三个)
过程二:将过程一产生的多个列表存储在新的列表中,即 [[ ],[ ],[ ]](假设有两个)
过程三:将过程二产生的多个列表再次存储在新的列表中,即 [ [[ ],[ ],[ ]], [[ ],[ ],[ ]] ]
实现这三个过程可以结合 for循环来进行,在调试过程中,我遇到了列表元素总是都是跟最后一次运行的元素相同,前面保存的元素都被它覆盖了。在解决这个问题时,我看了很多博主的博客,调了很久才终于成功。

for循环+将数据存储在列表

一般我们给列表后面逐一添加元素都会想到用append(),如:

LL=[]
for j in range(0,2):
    L=[]#建立空列表,注意该列表不要放在循环外,不然元素会出现重复添加
    for i in range(0,2):
        OH=[i,j]
        L.append(OH)
        print("L",L)
    LL.append(L)
    print("LL",LL)

【运行结果】
L [[0, 0]]
L [[0, 0], [1, 0]]
LL [[[0, 0], [1, 0]]]
L [[0, 1]]
L [[0, 1], [1, 1]]
LL [[[0, 0], [1, 0]], [[0, 1], [1, 1]]]
但当数据非常多且复杂时,用append()就会出现输出的元素总是只跟最后一个相同,即上面的列表变为:
LL [[[1, 0], [1, 0]]]
L [[1, 1], [1, 1]]
LL [[[1, 1], [1, 1]], [[1, 1], [1, 1]]]
因此,为了后面添加的数据不再覆盖前面的数据,有以下几种方法可以尝试,不过本人实践证明,这估计跟自己的数据量以及类型优点关系,所以不是所有方法都通用的,我也只能将它记录下来用作参考。

方法一

先给空列表中再次添加一个空元素,然后再添加元素,即:

LL1=[]
for j in range(0,2):
    L1=[]
    L1s=[]
    for i in range(0,4):
        OH=[i,j]
        L1s.append(i)#这里用多一个列表进行过渡
        L1s[i]=L1.append(OH)
        print("L1s",L1s)
    LL1.append(L1)
    print("LL1",LL1)  

【运行结果】
L1s [None]
L1s [None, None]
L1s [None, None, None]
L1s [None, None, None, None]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]]]
L1s [None]
L1s [None, None]
L1s [None, None, None]
L1s [None, None, None, None]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]], [[0, 1], [1, 1], [2, 1], [3, 1]]]

然后这里用的 i 还是不够好,于是可以把i改为 [ ] ,即:

LL1=[]
for j in range(0,2):
    L1=[]
    for i in range(0,4):
        L1.append([])#这里先添加空元素,避免访问错误
        OH=[i,j]
        L1[i]=OH
        print("L1",L1[i])
    LL1.append(L1)
    print("LL1",LL1[j])  

【运行结果】
L1 [[0, 0]]
L1 [[0, 0], [1, 0]]
L1 [[0, 0], [1, 0], [2, 0]]
L1 [[0, 0], [1, 0], [2, 0], [3, 0]]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]]]
L1 [[0, 1]]
L1 [[0, 1], [1, 1]]
L1 [[0, 1], [1, 1], [2, 1]]
L1 [[0, 1], [1, 1], [2, 1], [3, 1]]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]], [[0, 1], [1, 1], [2, 1], [3, 1]]]
这个方法虽然可以,但是在后面想调用列表时,可以发现这种方法产生的列表外面多了一个框“[ ]”,就像剥洋葱时发现有一块金属片一样,因为我想不到咋去掉,于是便产生了方法2

方法二

尝试了很多方法后发现原来添加的元素不是被替换就是提示调用有问题,后来终于发现,问题可能是因为地址的问题,因此每次都要给一个新地址。(知识参考)

LL1=[]
for j in range(0,2):
    L1=[]
    for i in range(0,4):
        OH=[i,j]
        L1.append(list(OH))#这里在添加的列表前面加上list就可以起到作用
        print("L1",L1)
    LL1.append(L1)
    print("LL1",LL1)  

【运行结果】
L1 [[0, 0]]
L1 [[0, 0], [1, 0]]
L1 [[0, 0], [1, 0], [2, 0]]
L1 [[0, 0], [1, 0], [2, 0], [3, 0]]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]]]
L1 [[0, 1]]
L1 [[0, 1], [1, 1]]
L1 [[0, 1], [1, 1], [2, 1]]
L1 [[0, 1], [1, 1], [2, 1], [3, 1]]
LL1 [[[0, 0], [1, 0], [2, 0], [3, 0]], [[0, 1], [1, 1], [2, 1], [3, 1]]]
可以发现这里列表就少了一层,可以解决调用异常的问题。

原文链接:https://blog.csdn.net/qq_40481843/article/details/120597703







所属网站分类: 技术文章 > 博客

作者:dgfv

链接:https://www.pythonheidong.com/blog/article/1049759/81bfe2a901782475d5d2/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

15 0
收藏该文
已收藏

评论内容:(最多支持255个字符)