週三面試Python開發,這幾道Python面試題差點答錯,Python面試題No7

夢想橡皮擦發表於2019-05-14

第1題:閱讀下面的程式碼,默讀出A0,A1至An的最終值。

A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
A1 = range(10)
A2 = [i for i in A1 if i in A0]
A3 = [A0[s] for s in A0]
A4 = [i for i in A1 if i in A3]
A5 = {i:i*i for i in A1}
A6 = [[i,i*i] for i in A1]
複製程式碼

默讀程式碼類的題目,相對來說是比較簡單的。重點去研究列表解析,之後你就可以輕鬆的回答這些問題嘍~

A0 = {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
A1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A2 = []
A3 = [1, 3, 2, 5, 4]
A4 = [1, 2, 3, 4, 5]
A5 = {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
A6 = [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]
複製程式碼

第2題:如何提高python的執行效率?

  1. 資料結構一定要選對 能用字典就不用列表:字典在索引查詢和排序方面遠遠高於列表。
  2. 多用python中封裝好的模組庫 關鍵程式碼使用外部功能包(Cython,pylnlne,pypy,pyrex)
  3. 使用生成器
  4. 針對迴圈的優化 儘量避免在迴圈中訪問變數的屬性
  5. 使用較新的Python版本

第3題: Python字典有什麼特點,從字典中取值,時間複雜度是多少?

dict(中文叫字典)是另一種可變容器模型,且可儲存任意型別物件。 字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號{}字典的特性

  1. 查詢速度快 無論dict有10個元素還是10萬個元素,查詢速度都一樣。而list的查詢速度隨著元素增加而逐漸下降。 不過dict的查詢速度快不是沒有代價的,dict的缺點是佔用記憶體大,還會浪費很多內容,list正好相反,佔用記憶體小,但是查詢速度慢。
  2. 字典值可以沒有限制地取任何python物件,既可以是標準的物件,也可以是使用者定義的,但鍵不行。 不允許同一個鍵出現兩次。 鍵必須不可變,所以可以用數字,字串或元組充當,所以用列表就不行。
  3. dict的第二個特點就是儲存的key-value序對是沒有順序的!這和list不一樣。

從字典中取值,時間複雜度是多少 O(1),字典是hash table實現

第4題: 多執行緒、多程式?

  1. 執行緒 執行緒是作業系統能夠進行運算排程的==最小單位==。它被包含在程式之中,是程式中的實際運作單位。 一條執行緒指的是程式中一個單一順序的控制流,一個程式中可以併發多個執行緒,每條執行緒並行執行不同的任務。一個執行緒是一個execution context(執行上下文),即一個cpu執行時所需要的一串指令。

  2. 程式 一個程式的==執行例項==就是一個程式。每一個程式提供執行程式所需的所有資源。(程式本質上是資源的集合) 一個程式有一個虛擬的地址空間、可執行的程式碼、作業系統的介面、安全的上下文(記錄啟動該程式的使用者和許可權等等)、唯一的程式ID、環境變數、優先順序類、最小和最大的工作空間(記憶體空間),還要有==至少一個執行緒==。 每一個程式啟動時都會最先產生一個執行緒,即主執行緒 然後主執行緒會再建立其他的子執行緒。

程式與執行緒區別

轉載自網際網路,總結的挺好的,有益! 深入的理解看這篇部落格就可以了:www.cnblogs.com/whatisfanta…

  1. 同一個程式中的執行緒共享同一記憶體空間,但是程式之間是獨立的。
  2. 同一個程式中的所有執行緒的資料是共享的(程式通訊),程式之間的資料是獨立的。
  3. 對主執行緒的修改可能會影響其他執行緒的行為,但是父程式的修改(除了刪除以外)不會影響其他子程式。
  4. 執行緒是一個上下文的執行指令,而程式則是與運算相關的一簇資源。
  5. 同一個程式的執行緒之間可以直接通訊,但是程式之間的交流需要藉助中間代理來實現。
  6. 建立新的執行緒很容易,但是建立新的程式需要對父程式做一次複製。
  7. 一個執行緒可以操作同一程式的其他執行緒,但是程式只能操作其子程式。
  8. 執行緒啟動速度快,程式啟動速度慢(但是兩者執行速度沒有可比性)。

第5題: 請儘可能列舉python列表的成員方法,並給出以下列表操作的答案:

  1. a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ?
a[::2] = [1, 3, 5], a[-2:] = [4, 5]
複製程式碼
  1. 一行程式碼實現對列表a中的偶數位置的元素進行加3後求和?
from functools import reduce
a = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x+y, [(x+3*((a.index(x)+1)%2)) for x in a])) # a中元素均不相同
# 或
print(reduce(lambda x, y: x+y, [a[x]+(x+1)%2*3 for x in range(0, 5)])) # 只適用於a中元素有5個情況
複製程式碼
  1. 將列表a的元素順序打亂,再對a進行排序得到列表b,然後把a和b按元素順序構造一個字典d。
from random import shuffle
a = [1, 2, 3, 4, 5]
# 打亂列表a的元素順序
shuffle(a)
# 對a進行排序得到列表b
b = sorted(a, reverse=True)
# zip 並行迭代,將兩個序列“壓縮”到一起,然後返回一個元組列表,最後,轉化為字典型別。
d = dict(zip(a, b))
print(d)
複製程式碼

相關文章