1. 程式人生 > >python 之金玉良言 或許是最後一次給自己系統總結

python 之金玉良言 或許是最後一次給自己系統總結

trace 必須 註意 結果 需要 完全 可變對象 turn 哈希算法

set和dict的唯一區別僅在於沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象,因為無法判斷兩個可變對象是否相等,也就無法保證set內部“不會有重復元素”。

請務必註意,dict內部存放的順序和key放入的順序是沒有關系的。

和list比較,dict有以下幾個特點:

查找和插入的速度極快,不會隨著key的增加而變慢;
需要占用大量的內存,內存浪費多。
而list相反:

查找和插入的時間隨著元素的增加而增加;
占用空間小,浪費內存很少。
所以,dict是用空間來換取時間的一種方法。

dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。

這是因為dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱為哈希算法(Hash)。

要保證hash的正確性,作為key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key:

>>> key = [1, 2, 3]
>>> d[key] = 'a list'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'


l = [4,5,6]
t = (1,)
s = {1}
# s = set([1,2,3])
d = {'name':'frank'}

help(abs)
"""
練習
小明身高1.75,體重80.5kg。請根據BMI公式(體重除以身高的平方)幫小明計算他的BMI指數,並根據BMI指數:

低於18.5:過輕
18.5-25:正常
25-28:過重
28-32:肥胖
高於32:嚴重肥胖
"""
height = 1.75
weight = 80.5

def BMI(height,weight):
    bmi = (weight/height)**2
    results = ("過輕","正常","過重","肥胖","嚴重肥胖")
    ret = results[-1]
    if bmi<18.5:
        ret = results[0]
    elif 18.5<=bmi<25:
        ret = results[1]
    elif 25<=bmi<28:
        ret = results[2]
    elif 28<=bmi<32:
        ret = results[3]
    else:
        pass
    return ret

BMI(height,weight)

    

我見青山多巍峨,料青山見我應如是

python 之金玉良言 或許是最後一次給自己系統總結