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

第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]
複製代碼

默讀代碼類的題目,相對來講是比較簡單的。重點去研究列表解析,以後你就能夠輕鬆的回答這些問題嘍~html

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)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號{}字典的特性python

  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…dom

  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)
複製代碼
相關文章
相關標籤/搜索