本节内容:
python面试题
Python面试题:
写出一段Python代码实现删除一个list里面的重复元素:
一、自己的思路:
遍历列表,发现元素不同,添加到新列表C中。
最后将C列表赋值给原列表
自我总结:
1.
迭代器的迭代方式(按索引迭代)
这种迭代方式是按索引来的。
如果在迭代过程中对原列表进行操作,会产生奇怪的记过。
例子:
>>> c=[1,2,3,4]
>>> for b in c:
print "before:"+str(b)
c.remove(b)
print "after:"+str(b)
before:1
after:1
before:3
after:3
从这个例子能学到:如果在迭代时删除某个元素,会导致列表改变,但是迭代器依旧以原来的索引顺序迭代,这会导致数据错位,引起bug
2.编写循环逻辑注意点:
一般只是简单的for循环是比较简单的,但是如果伴随着相应变量的变更,变量的读取,就会比较容易出错。
2.1怎么减小错误呢?.最简单的方法,画图,一个循环一个图,就比较容易想清楚了。
2.2怎么提高编程能力?特别面对循环时?
首先,是积累,脑子里需要建立一个知识库。(类似的问题该怎么解决)
其次,是在编程时,用到积累的知识需要和环境结合,可能思维会乱,可以画图
最后,就是归纳第二步的思维,这样就能写出程序了
3.参数传递,与值的改变
如果a引用了一个对象,那么将a传入select函数。在select改变行参的值不影响外界a的值。
只有改变a所指向内存的值,才能改变a的值
4.当对数据进行操作时,需要考虑此操作是否会影响以后的操作。
二:网上比较好的答案:
思路:从后往前,遍历,这样删除元素此也不会影响以后遍历时取值的操作
代码:
总结:
range函数的起始于结束:
输出结果:打印从1到99
输出结果:打印从5到0
碰到这种问题的经验:
1.要用循环
2.因为是对列表删除操作,又要遍历整个列表,所以从后往前遍历比较好,就算删除了后面的元素,也不会影响前面元素的顺序
3.首先一个中间值(temp),temp等于该列表的最后一个值。
将temp与从后往前遍历来的值对比
如果 相等,就删除
否则 就 将值赋给temp,一边下次循环比较