條件語句
除了 boolean 類型的數據,條件判斷最好是顯性的
if i != 0: ...
而不是只寫出變量名:
if i: ...
For循環與While循環
- 通常來說,如果你只是遍歷一個已知的集合,找出滿足條件的元素,並進行相應的操作,那么使用 for 循環更加簡潔。
但如果你需要在滿足某個條件前,不停地重復某些操作,並且沒有特定的集合需要去遍歷,那么一般則會使用 while 循環。
- range() 函數是直接由 C 語言寫的,調用它速度非常快。
而 while 循環中的“i += 1”這個操作,得通過 Python 的解釋器間接調用底層的 C 語言;並且這個簡單的操作,又涉及到了對象的創建和刪除(因為 i 是整型,是 immutable,i += 1 相當於 i = new int(i + 1))。
所以,顯然,for 循環的效率更勝一籌。
條件與循環的復用
例:給定兩個列表attributes和values,要求針對 values 中每一組子列表 value,輸出其和 attributes 中的鍵對應后的字典組成的列表:
[{'name': 'jason', 'dob': '2000-01-01', 'gender': 'male'}, {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}, {'name': 'nancy', 'dob': '2001-02-01', 'gender': 'female'}]
多行代碼:
import copy attributes = ['name', 'dob', 'gender'] values = [ ['jason', '2000-01-01', 'male'], ['mike', '1999-01-01', 'male'], ['nancy', '2001-02-01', 'female'] ] l_except = [] d = {} for value in values: #方法一 #for index,v in enumerate(value): #d[attributes[index]] = v #方法二 d = dict(zip(attributes,value)) l_except.append(d) #d.clear() #值得注意的是list,dict是傳遞引用,如果調用此句下句就會為[{},{},{}] #可以用copy.deepcopy傳遞學拷貝對象l_except.append(copy.deepcopy(d)) print(l_except)
一行代碼處理:
l_except = [{arrt: v[index] for index, arrt in enumerate(attributes)}for v in values] print(l_except) # or l_except = [dict(zip(attributes,v)) for v in values] print(l_except)
參考:
極客時間《Python核心技術與實戰》