项目场景:
按列表原次序输出非重复元素(浙大mooc《Python程序设计》,6.3思考题
问题描述:
两种方法有什么区别l = [2,3,5,8,3,6,8,6,5]
seen = set()
m = [i for i in l if i not in seen and not seen.add(i)]
n = [i for i in l if not seen.add(i) and i not in seen]
print(m,n,seen,sep='\n')
>>>[2,3,5,8,6]
>>>[]
>>>[2,3,5,6,8]
原因分析:
第二种方法中,由于执行顺序是从左往右,所以先判断并执行seen.add(i),然后再判断i是否在seen中。这样即使 i 原先不在seen中,在执行seen.add(i)时也已经被加入seen了,于是第二个条件永远是False,所以最终结果n为空列表。