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代鏈條上



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM