• python基础面试


     1  请用自己的算法, 按升序合并如下两个list, 并去除重复的元素:

    list1 = [2, 3, 8, 4, 9, 5, 6]
    list2 = [5, 6, 10, 17, 11, 2]

    答案:

    (1)自己的算法?

    for x in list1:

        for y in list2:

                if x == y:

                    list2.remove(y)

    list1 = list1+list2

    lsit1 = list1.sort()

    (2) 

    list1[0:0]=list2  或者 list1.extend(list2)

    注意:列表方法sort()改变是列表本身序列,没有返回值,sorted函数是生成一个新的有返回值

    list1.extend(list2)

    print(sorted(set(list1)))


    1. 对比一下dict中 items 与 iteritems

      items会一次性取出所有的值,并以列表返回,iteritems返回的是生成器,通过迭代取出里面的值,一般在数据量大的时候,iteritems会比items效率高些

    1. Python中如何去除list中重复的数据

    方法一:

    使用set函数

    方法二:

    a = [1,2,3,4,5,56,6,7,8,8,9]

    b = {}

    b= b.fromkeys(a)

    c= list(b)

    1. 请实现字符串翻转5种方案

    Python实现

    方法一:

    def reverse (s):  

        rt = ''  

        for i in range(len(s)-1, -1, -1):  

            rt += s[i]  

        return rt  

      

     方法二: 

    def reverse2 (s):  

        li = list(s)  

        li.reverse()  

        rt = "".join(li)  

        return rt  

     方法三:

    def reverse3 (s):  

        return s[::-1]  

     方法四: 

    def reverse4 (s):  

        return "".join(reversed(s))  

      方法五:

    from functools import reduce  

    def reverse5 (s):  

        return reduce(lambda x,y:y+x,s)  

    注意:方法一和方法二以及方法三一般人都能写,四和五比较新颖

    1. 在没有第三个参数的情况下,交换2个变量的值

    方案一:a,b = b,a

    方案二:a = a + b

                 b = a - b

                 a = a - b

    1. 实现将2个元组合并成一个字典

     a = ('a','b','c','d')

     b = (1,2,3,4)

    dict(map(lambda x,y:[x,y],a,b))

    二:

     dict(zip(a,b))


    1. 要求写出一个单例程序

    class Dog(object):

        __first_new = True

        __instance = None

            def __new__(cls):

                    if cls.__first_new:

                            cls.__instance = object.__new__(cls)

                            cls.__first_new = False

                            return cls.__instance

                     else:

                            return cls.__instance

    a = Dog()

    b = Dog()

    1. Python和c和Java的对比

    python比较容易学习,语法简单python的库非常丰富,开发速度快,但是python脚本运行效率低,不适合做运行效率要求高的程序,java的语法比较严格,学习的曲线比较长,开发框架很强大,比较适合企业级的应用,和python\java相比,c是最古老的,c是为了代替汇编语言才出现的,一般用c做操作系统方面的开发,linux就是。

    1. 有用过with statement吗?它的好处是什么?
    用过,有时我们处理一些文件操作的时候,可能会忘记进行close,而且在处理一些文件时很可能会发生一些异常,需要单独判断,with即上下文管理器,就很好的帮我们处理了这些,而且最棒的是他可以自动处理异常
    1. 是否遇到过python的模块间循环引用的问题,如何避免它?
    这是代码结构设计的问题,模块依赖和类依赖
    如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象
    使用 “__all__” 白名单开放接口
     尽量避免 import


    1. 用最简单的方法将二维数组a = [[1,2,3],][4,5,6],][7,8,9],[11,12,13]]变成一维数组a = [1,2,3,4,5,6,7,8,9,11,12,13]

    方法一

    列表推导式

    a1 = [y for x in a for y in x]

    方法二

    from compiler.ast import flatten

    xx = flatten(a)


    1. 请阐述垃圾回收机制的原理

    要是被问到就这么和面试官答保你必过:

    python的垃圾回收机制和Java一样是自动回收没有用的资源的,采用的是引用计数为主,分带回收为辅的策略,

    在python中当程序的引用计数为0的时候,Python就会对它进行回收处理释放资源,也就是引用计数为主,因为程序

    的引用每次都会进行记录统计,所以引用计数会占用大量的资源,导致资源无法释放,当出现这种情况下,

    python就会把所有循环引用的对象放在一个链表当中,这个链表称为0代,当引用计数器达到一定的阀值时,

    Python会对0代的链条进行检查,标出没用的引用对象进行回收释放内存,将剩余的引用对象重新生成一个新的

    链条即1代链条,当引用计数器达到一定的阀值,python处理1代的回收对象,将剩余的对象重新生成一个新的链条

    即2代链条,当2代处理后如果有对象没有回收,该对象就放在2代链条上


  • 相关阅读:
    精选的一些《编程之美》相关资料
    使用SftpDrive+SourceInsight阅读开源代码
    malloc()参数为0的情况
    《编程之美》4.5磁带文件存放优化:最优解是怎样炼成的
    从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
    《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明
    解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
    C语言中 Float 数据结构的存储计算
    C#之内存分配
    unity----------------3D模型讲解
  • 原文地址:https://www.cnblogs.com/syketw23/p/7667594.html
Copyright © 2020-2023  润新知