python学习笔记 day15 作业讲解

def extendList(val,list=[]):   #陷阱问题,默认参数传进去的是可变数据类型list
    list.append(val)
    return list
list1=extendList(10)       #使用的默认的,所以现在原函数中默认参数那个空列表已经变为[10]
print(list1)
list2=extendList(123,[])   #给list传了一个新的空列表,里面放的元素是123(不是函数定义处的那个空列表,是新的)
list3=extendList('a')      #使用默认参数中的list,这个list在list1处已经往list中加了一个10,现在又加了一个a,所以变为[10,'a']
print(list1)               #由于是在list3往默认参数中的列表加值之后才打印的list1所以,这里的list1也变了,
print(list2)
print(list3)

运行结果:

python学习笔记 day15 作业讲解

就是list1在执行完extendList(10)之后确实列表中的元素只有一个10,但是,list1和list3和原定义函数处的list指向的是同一个列表,(返回的是内存地址),后面再对这个列表进行append,list1也是会变化的,如果list1得到之后立即打印,就是[10],但是执行完list3之后再打印,它里面的列表已经又增加了一个元素,所以此时的list1和list3指向同一个内存地址,里面的元素当然也是一样的啦!

 2.请写出一段python代码,实现删除一个list里面的重复元素:

当然比较简单的方法就是使用集合set(L),但是转为set的一瞬间就变为无序啦!

def func():
    L=[1,2,3,2,1,3,3,1,2,3,2,2,1]
    index=0
    while index<len(L):
        if L[index] in L[:index]:
            L.remove(L[index])
        else:
            index+=1
        print(L)
    return L
L=func()

运行结果:

python学习笔记 day15 作业讲解

版本二(Eva-J)

L=[1,2,3,2,1,2,4,3,2,64,32,2,5,4,3,5]
L1=[]
for i in L:
    if i not in L1:
        L1.append(i)
print(L1)

运行结果:

python学习笔记 day15 作业讲解