栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

用循环在列表中添加元素
  • for循环+将数据存储在列表
    • 方法一
    • 方法二

最近在进行数据处理,需要通过计算得到数据,再将数据用来绘图,其中还要取出个别数据进行处理。因此数据与数据之间存在嵌套,为了更好地调用数据,决定 使用列表来存储数据,这样在后期调用数据时就可以用 遍历列表的方法进行调用。
本次数据存储主要是以下过程:
过程一:计算得到数据一维列表 [ ](假设有三个)
过程二:将过程一产生的多个列表存储在新的列表中,即 [[ ],[ ],[ ]](假设有两个)
过程三:将过程二产生的多个列表再次存储在新的列表中,即 [ [[ ],[ ],[ ]], [[ ],[ ],[ ]] ]
实现这三个过程可以结合 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]]]
可以发现这里列表就少了一层,可以解决调用异常的问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号