注册 登录
编程论坛 Python论坛

求助,一个列表的问题

frefly0203 发布于 2021-03-06 09:10, 1800 次点击

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]]
'''


请问这是怎么回事?谢谢大家
7 回复
#2
fall_bernana2021-03-08 11:27
回复 楼主 frefly0203
这个问题以前有人问过: 你可以查下浅拷贝和深拷贝。
简单的理解就是你把一个可变的数组存入数组。比如  list.append(kongf) 就变成了 list=[kongf[],kongf[],kongf[]],当你修改第一个kongf的值会导致同时修改了其他的kongf的值。所以第45行相当于重新初始化了list里的每一个值为独立的值。互相不会干扰。
#3
frefly02032021-03-08 21:50
回复 2楼 fall_bernana
thanks
#4
sssooosss2021-03-11 09:12
共同学习
#5
西岭河2021-03-11 14:42
进来学习
#6
yanleicoffee2021-03-12 15:24
感觉找到组织了阿,好好学习
#7
foxprosue2021-03-14 19:09
学习
#8
傻眼猫咪2021-08-02 14:09
我採用了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)
1