您的位置:首页 > 编程语言 > Python开发

python 面试题总结

2013-11-08 07:51 218 查看

python 面试题总结

2012-10-13 11:27:37

Python面试题:请写出一段Python代码实现删除一个list里面的重复元素:

一、自己的思路:

遍历列表,发现元素不同,添加到新列表C中。

最后将C列表赋值给原列表

def select(a):

i=None

c=[]

for b in a:

if i!=b:

c.append(b)

i=b

a[0:]=c

自我总结:

1.

迭代器的迭代方式(按索引迭代)

for b in c:

print str(b)

这种迭代方式是按索引来的。

如果在迭代过程中对原列表进行操作,会产生奇怪的记过。

例子:

>>> 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.当对数据进行操作时,需要考虑此操作是否会影响以后的操作。

二:网上比较好的答案:

思路:从后往前,遍历,这样删除元素此也不会影响以后遍历时取值的操作

代码:

def sort_select(a):

if not a: print 'there is nothing in a'

else:

temp = a[-1]

for i in range(len(a)-2,-1,-1):

if a[i]==temp:del a[i]

else:temp=a[i]

总结:

range函数的起始于结束:

for i in range(100):

print str(i)

输出结果:打印从1到99

for i in range(5,-1,-1):

print str(i)

输出结果:打印从5到0

碰到这种问题的经验:

1.要用循环

2.因为是对列表删除操作,又要遍历整个列表,所以从后往前遍历比较好,就算删除了后面的元素,也不会影响前面元素的顺序

3.首先一个中间值(temp),temp等于该列表的最后一个值。

将temp与从后往前遍历来的值对比

如果 相等,就删除

否则 就 将值赋给temp,一边下次循环比较
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: