python 子列表合并,没有进行赋值操作,为什么值会变化?

作者站长头像
站长
· 阅读数 5
l = [['a','b',1], ['a','c',2], ['a','b',3], ['a','c',4], ['a','b',5]]
L = []
for i in range (len(l)):
    flag = True
    for j in range(len(L)):
        if L[j][:-1] == l[i][:-1]:
            flag = False
            z=j
            break
    if flag == True:
        L.append(l[i])
    else:
        L[z][-1] = L[z][-1] + l[i][-1]
    print('l:  ')
    print(l)
    print('L:  ')
    print(L)

输出为:

l:
[['a', 'b', 1], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L:
[['a', 'b', 1]]
l:
[['a', 'b', 1], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L:
[['a', 'b', 1], ['a', 'c', 2]]
l:
[['a', 'b', 4], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L:
[['a', 'b', 4], ['a', 'c', 2]]
l:
[['a', 'b', 4], ['a', 'c', 6], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L:
[['a', 'b', 4], ['a', 'c', 6]]
l:
[['a', 'b', 9], ['a', 'c', 6], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L:
[['a', 'b', 9], ['a', 'c', 6]]

我想实现的是,把子列表中前两个字符相同的合并,最后一位的值相加,放到新列表中但是我没有给l赋值,为什么l列表里的值也变了呢

回复
1个回答
avatar
test
2024-06-24

l = [['a', 'b', 1], ['a', 'c', 2], ['a', 'b', 3], ['a', 'c', 4], ['a', 'b', 5]]
L = []

for i in range(len(l)):
    flag = True
    for j in range(len(L)):
        if L[j][:-1] == l[i][:-1]:
            flag = False
            z = j
            break
    if flag:
        L.append(l[i][:])  
    else:
        L[z][-1] += l[i][-1]  

# 输出测试结果
l, L
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容