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)
运行结果:
就是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()
运行结果:
版本二(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)
运行结果: