第1題:閱讀下麵的代碼,默讀出A0,A1至An的最終值。 默讀代碼類的題目,相對來說是比較簡單的。重點去研究列表解析,之後你就可以輕鬆的回答這些問題嘍~ 第2題:如何提高python的運行效率? 1. 數據結構一定要選對 能用字典就不用列表:字典在索引查找和排序方面遠遠高於列表。 2. 多用pyth ...
第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的運行效率?
- 數據結構一定要選對
能用字典就不用列表:字典在索引查找和排序方面遠遠高於列表。 - 多用python中封裝好的模塊庫
關鍵代碼使用外部功能包(Cython,pylnlne,pypy,pyrex) - 使用生成器
- 針對迴圈的優化
儘量避免在迴圈中訪問變數的屬性 - 使用較新的Python版本
第3題: Python字典有什麼特點,從字典中取值,時間複雜度是多少?
dict(中文叫字典)是另一種可變容器模型
,且可存儲任意類型對象。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧{}
中
字典的特性
- 查找速度快
無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度隨著元素增加而逐漸下降。
不過dict的查找速度快不是沒有代價的,dict的缺點是占用記憶體大,還會浪費很多內容,list正好相反,占用記憶體小,但是查找速度慢。 - 字典值可以沒有限制地取任何python對象,既可以是標準的對象,也可以是用戶定義的,但鍵不行。
不允許同一個鍵出現兩次。
鍵必須不可變,所以可以用數字,字元串或元組充當,所以用列表就不行。 - dict的第二個特點就是存儲的key-value序對是沒有順序的!這和list不一樣。
從字典中取值,時間複雜度是多少
O(1)
,字典是hash table
實現
第4題: 多線程、多進程?
線程
線程是操作系統能夠進行運算調度的==最小單位==。它被包含在進程之中
,是進程中的實際運作單位。
一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程
,每條線程並行執行不同的任務。一個線程是一個execution context(執行上下文),即一個cpu執行時所需要的一串指令。進程
一個程式的==執行實例==就是一個進程。每一個進程提供執行程式所需的所有資源。(進程本質上是資源的集合)
一個進程有一個虛擬的地址空間、可執行的代碼、操作系統的介面、安全的上下文(記錄啟動該進程的用戶和許可權等等)、唯一的進程ID、環境變數、優先順序類、最小和最大的工作空間(記憶體空間),還要有==至少一個線程==。
每一個進程啟動時都會最先產生一個線程,即主線程
然後主線程會再創建其他的子線程。
進程與線程區別
轉載自互聯網,總結的挺好的,有益!
深入的理解看這篇博客就可以了:https://www.cnblogs.com/whatisfantasy/p/6440585.html
- 同一個進程中的線程共用同一記憶體空間,但是進程之間是獨立的。
- 同一個進程中的所有線程的數據是共用的(進程通訊),進程之間的數據是獨立的。
- 對主線程的修改可能會影響其他線程的行為,但是父進程的修改(除了刪除以外)不會影響其他子進程。
- 線程是一個上下文的執行指令,而進程則是與運算相關的一簇資源。
- 同一個進程的線程之間可以直接通信,但是進程之間的交流需要藉助中間代理來實現。
- 創建新的線程很容易,但是創建新的進程需要對父進程做一次複製。
- 一個線程可以操作同一進程的其他線程,但是進程只能操作其子進程。
- 線程啟動速度快,進程啟動速度慢(但是兩者運行速度沒有可比性)。
第5題: 請儘可能列舉python列表的成員方法,並給出以下列表操作的答案:
- a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ?
a[::2] = [1, 3, 5], a[-2:] = [4, 5]
- 一行代碼實現對列表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個情況
- 將列表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)