Algorithm
題目描述:
給定一個整數(shù)數(shù)組 nums和一個目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那兩個整數(shù),并返回他們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會對應(yīng)一個答案。但是,你不能重復(fù)利用這個數(shù)組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9因為 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
代碼:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
data = {nums[i]: i for i,n in enumerate(nums)}
for i in range(len(nums)):
component = target - nums[i]
if component in data and data.get(component) != i:
return [i, data.get(component)]
Review
https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py
閱讀python的繪制常用的數(shù)據(jù)圖的庫matplotlib的簡介,該庫用python實現(xiàn)了matlab里的一些繪圖接口,在做數(shù)據(jù)分析時,該庫是一個數(shù)據(jù)可視化的優(yōu)秀工具。
- 文章中首先介紹了一般的圖中的基本元素以及這些元素在matplotlib里相應(yīng)的接口,如常用的axis(圖的軸),legend(圖的標(biāo)記,例如可以標(biāo)記圖中某種顏色的曲線是表示哪一類的,用于區(qū)分各個曲線對應(yīng)的類型),marker(圖中數(shù)據(jù)點的標(biāo)記符號,例如散點圖里的點用什么標(biāo)記)。
- 接著介紹了pyplot方法的輸入類型,里面同時涉及到numpy,pandas這兩個python庫和matplotlib如何和一起使用,并通過一個示例演示了matplotlib.pyplot方法的使用。
- 最后介紹了使用matplotlib需要注意的編碼風(fēng)格、涉及到matplotlib使用場景的backend、matplotlib的交互模式和非交互模式,還簡單介紹了matplotlib的性能以及如何使用其fast style。
Tip
python中函數(shù)傳參是值傳遞還是引用傳遞的問題
判斷方式為看該參數(shù)是可變的還是不可變的,如果是可變的如list,dict這樣的,那么傳入?yún)?shù)的時候則是引用傳遞,而如果不可變的,如tuple,str,number這樣的則是值傳遞。
Share
python3中bytes,str,unciode
python3中有兩種表示字符序列的類型:bytes和str。前者包含原始的8位值,后者實例包含的是unicode。
8位值指的就是在某種編碼下的一個字節(jié),比如'A'用ascii編碼對應(yīng)的值就是65,對應(yīng)的二進(jìn)制表示為01000001,那么'A'如果用ascii編碼為bytes類型的話,它所包含的原始8位值就是01000001。
unicode則是為了統(tǒng)一各種語言編碼而產(chǎn)生的一套統(tǒng)一的編碼方式,任何語言都可以編碼為unicode,在計算機(jī)的內(nèi)存中,也只有unicode。在計算機(jī)最早期,只有ascii編碼,但是ascii編碼方式一個字符只占用一個字節(jié),這樣就只能表示英文字符了,這時候中文字符就無法表示了,所以我國出現(xiàn)了gb2312的編碼方式,使得中文可以表示,各個國家有著各個國家的語言,如果每個語言都是用一套各自的編碼方式,那這個就沒有辦法統(tǒng)一了,別人寫的代碼可能換個語言環(huán)境就無法正常運(yùn)行了,因此才出現(xiàn)了unicode,統(tǒng)一了各種編碼方式,即是所以得語言都可以通過unicode進(jìn)行編碼,這時候unicode就不可能像ascii那樣只占用1個字節(jié)了,因為一個字節(jié)意味著最多只能表示256個字符,所以語言的字符數(shù)肯定不止256,通常來講unicode占用2個字節(jié)。
那么utf-8又是什么呢?utf-8的產(chǎn)生是為了節(jié)省空間而出現(xiàn)的,前面講到unicode通常占用2個字節(jié),但是對于英文字符其實只需要一個字節(jié)就可以表示了,因此utf-8為了節(jié)省空間實現(xiàn)了動態(tài)長度的表示,比如它在編碼中對英文字符用1個字節(jié)表示,而通常對于漢字就是用3個字節(jié)表示。
為了驗證前面講到的,我們可以做個試驗驗證一下:

可以看到'A'的ascii編碼是65,轉(zhuǎn)成二進(jìn)制就是0b1000001,unicode編碼和utf-8編碼均為65,二進(jìn)制0b1000001。
漢字‘中’無法用ascii編碼,如果我們執(zhí)行'中'.encode('ascii')會報錯,它的unicode編碼是'\u4e2d',轉(zhuǎn)成二進(jìn)制是01001110 00101101,utf-8編碼是\xe4\xb8\xad,轉(zhuǎn)成二進(jìn)制是11100100 10111000 10101101。
一般情況下沒有特殊業(yè)務(wù)需求,我們盡量使用utf-8編碼即可。例如平常我們用notepad++存文本文件的時候,會保存為utf-8無bom的編碼,意味著這個文本文件是通過utf-8編碼后存儲了,例如對于漢字’中‘在文本文件中就會存為二進(jìn)制的11100100 10111000 10101101,那么當(dāng)我們讀取這個文本文件到內(nèi)存中時就必須把它轉(zhuǎn)為unicode讀入到內(nèi)存了,因為實際上計算機(jī)的內(nèi)存中只存在unicode,這就是為什么我們在寫python的時候常常在文件的頂部加一行# -- coding: utf-8 --,這一句就告訴解釋器以utf-8的編碼方式去讀取這個文件。