标题:求助,一个列表的问题
只看楼主
frefly0203
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2021-1-9
结帖率:0
已结贴  问题点数:10 回复次数:7 
求助,一个列表的问题

name_list= ['A', 'B', 'C','D']
data = [
    [
        ['A','B','C'],
        [20,40,10],
        [120,140,600]
    ],
    [
        ['A','C','D'],
        [1,2,3],
        [10,20,30]
    ]
]

n = 0
ls = []
while n <len(name_list):
    ls.append(0)
    n +=1


list = []
n = 0
while n < len(data):
    kongf = []
    m = 0
    while m<len(data[n]):
        kongf.append(ls)
        m +=1
    list.append(kongf)
    n +=1

for i in list:
    n = 0
    while  n<len(i):
        i[0]=name_list
        n +=1

print(list)




#list= [[['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]], [['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]]]


n = 0
while n <len(data):
    m = 0
    while m <len(data[n]):
        k = 0
        while k<len(data[n][m]):
            list[n][m][list[n][0].index(data[n][0][k])]=data[n][m][k]

            k +=1
        m +=1
    n +=1
 
for i in list:
    print(i)

'''
这是注释掉第45 行#  “list= ”的结果
[[['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]], [['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]]]
[['A', 'B', 'C', 'D'], [10, 140, 20, 30], [10, 140, 20, 30]]
[['A', 'B', 'C', 'D'], [10, 140, 20, 30], [10, 140, 20, 30]]

'''

'''
这是  没有 注释掉第45 行#  “list= ”的结果,这种结果是我想要的!!!!!!!!!!!!!!!!!
[[['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]], [['A', 'B', 'C', 'D'], [0, 0, 0, 0], [0, 0, 0, 0]]]
[['A', 'B', 'C', 'D'], [20, 40, 10, 0], [120, 140, 600, 0]]
[['A', 'B', 'C', 'D'], [1, 0, 2, 3], [10, 0, 20, 30]]
'''


请问这是怎么回事?谢谢大家
搜索更多相关主题的帖子: data list append 结果 while 
2021-03-06 09:10
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:3 
回复 楼主 frefly0203
这个问题以前有人问过: 你可以查下浅拷贝和深拷贝。
简单的理解就是你把一个可变的数组存入数组。比如  list.append(kongf) 就变成了 list=[kongf[],kongf[],kongf[]],当你修改第一个kongf的值会导致同时修改了其他的kongf的值。所以第45行相当于重新初始化了list里的每一个值为独立的值。互相不会干扰。
2021-03-08 11:27
frefly0203
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2021-1-9
得分:0 
回复 2楼 fall_bernana
thanks
2021-03-08 21:50
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
得分:3 
共同学习
2021-03-11 09:12
西岭河
Rank: 2
等 级:论坛游民
帖 子:44
专家分:10
注 册:2021-3-9
得分:3 
进来学习
2021-03-11 14:42
yanleicoffee
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2021-3-12
得分:3 
感觉找到组织了阿,好好学习
2021-03-12 15:24
foxprosue
Rank: 2
等 级:论坛游民
帖 子:27
专家分:11
注 册:2021-2-3
得分:0 
学习
2021-03-14 19:09
傻眼猫咪
Rank: 2
等 级:论坛游民
威 望:1
帖 子:38
专家分:85
注 册:2021-8-2
得分:0 
我採用了list函數裡的 list.insert 和 list.index 兩種方法
1) list.insert 方法在指定索引處向列表中插入一個元素
2) list.index 方法返回列表中指定元素的索引
程序代码:
name = ['A', 'B', 'C', 'D']
data = [
    [['A', 'B', 'C'], [20, 40, 10], [120, 140, 600]],
    [['A', 'C', 'D'], [1, 2, 3], [10, 20, 30]]
    ]

for i in name:
    for j in range(len(data)):
        if i not in data[j][0]:
            data[j][0].insert(name.index(i), i) 
            data[j][1].insert(name.index(i), 0)
            data[j][2].insert(name.index(i), 0)

print(data)
2021-08-02 14:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505025-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.255449 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved