分享:python 面试题总结

发布时间:2019-09-13编辑:脚本学堂
本文分享几个python面试题,自己做了些总结,有兴趣的朋友可以参考下,挺不错的。

本节内容:
python面试题

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,一边下次循环比较