標籤:

python基礎篇之小白滾躺式入坑

入坑理由上一篇文章已經說過了,今天來詳細談談我是怎麼操作學習python的吧!

關於Anaconda及jupyter notebook的安裝請看猴子老師的文章,步驟很詳細清楚

初學python者自學anaconda的正確姿勢是什麼??www.zhihu.com圖標jupyter notebook 可以做哪些事情?www.zhihu.com圖標

新手請看這裡,雖然以上文章已經很清楚,但是對於小白來說,特別是不太懂計算機軟體操作的小夥伴也還是有一定困難的,我在安裝中很幸運沒有遇見什麼報錯的問題,但是安裝完我一度在想我是否已經安裝好了,怎麼樣判斷安裝是否成功,一般而言可以創建環境,執行命令可以得到相對於的反應,安裝應該沒有大問題了,當然這過程中要學會把自己的問題去搜索,英語網站看不到就去找度娘,先解決軟體的問題是大事,注意一點,jupyter notebook設置路徑的時候不能有中文!

開始我的學習總結,歡迎大家入坑

首先介紹一下基本的一些注意事項:

注釋的三種形式: #號和 、 """

行與縮進:注意縮進的間隙一致,不然容易導致運行出現錯誤

下面介紹一下整個文章的七個主要內容:

數據類型、條件控制、循環語句、迭代器與生成器、函數、數據結構、模塊

一、Python3 中的數據類型:

  • Number(數字)
  • String(字元串)
  • List(列表)
  • Tuple(元組)
  • Sets(集合)
  • Dictionary(字典)
  • 布爾(Ture False)
  • 空值(None)

1、Number(數字):作用於存儲數值,不允許改變的,如果改變數字數據類型值,將重新分配內存空間。

數字有四種類型:整數(int)、長整數、浮點數(float)和複數(complex)

1.1 整數:1

長整數:比較大的整數

浮點數:0.5

複數:3+5j

1.2算術運算符「+(加)、-(減)、*(乘)、/(除以)、%(餘數)、**(冪次方)、//(除後取整數)」

具體案例見下:


2、String(字元串)

2.1 字元串用「」來表示,比如這個代碼:

這個的表現形式就是字元串,最終的結果是引號裡面的數據或者文字。

2.2 字元串的格式化:

2.3 Python轉義字元

(在行尾時)-續行符,\-反斜杠符號,-退格(Backspace),
-換行,
-回車,f-換頁

轉義符有很多,我只摘錄了一些常用的,後面運算和學習會用得上,這個還是需要去記憶的。

2.4 Python三引號:python三引號允許一個字元串跨多行,字元串中可以包含換行符、製表符以及其他特殊字元。

三引號讓程序員從引號和特殊字元串的泥潭裡面解脫出來,自始至終保持一小塊字元串的格式是所謂的WYSIWYG(所見即所得)格式的。

這點這個我還沒有操作過,所以不是太能理解,意思應該是運用三引號,打多行代碼不需要各種字元串等之間的轉換,這個在下一步python基礎的鞏固練習中會進一步加深,有小夥伴理解的話可以告訴我一下

字元串還有很多內建函數,這個不一一舉例,當鞏固練習了

2.5 字元串可以用+將字元合併


3、List(列表):

序列是Python中最基本的數據結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推得到我們想要的搜引數據。

3.1列表一般是以 list[ ] 的形式出現,下圖就是通過索引得出結果的:

以下案例通過列表定義進行更新、刪除等操作,需要注意的是在這之前需要記住關鍵字,不需要死記硬背,加強練習就可以了

第一步定義

第二步增加科目,append()有添加列表項的功能

第三步刪除元素,del不管在哪個數據類型裡面都是刪除的意思,可以刪除不需要的數據或者元素,不同數據類型使用方法略些不同

第四步使用索引功能,查詢想要的數據

第五步修改數據,把原始數據修改成自己最後想要的結果

最後輸出操作修改的列表,得到自己最後想要的數據

這個是比較基礎的,是我們的練習題,我還沒有自己舉一反三的出題做題,後期會自己仔細琢磨在最基礎的知識上深化讓自己更加熟悉。

3.2Python列表腳本操作符

列表對 + 和 * 的操作符與字元串相似。+ 號用於組合列表,* 號用於重複列表

3.3 Python列表截取與拼接

列表截取

拼接操作

嵌套函數

3.4 函數(以下的函數需要不斷練習才會比較熟悉,可以結合Excel裡面函數的用法來記憶和使用,會有一些異曲同工之處):

3.4.1 len() 方法返回列表元素個數

3.4.2 list() 方法用於將元組轉換為列表

3.4.3 append() 方法用於在列表末尾添加新的對象

添加新的對象

3.4.4 count() 方法用於統計某個元素在列表中出現的次數

3.4.5 extend() 函數用於在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)

3.4.6 index() 函數用於從列表中找出某個值第一個匹配項的索引位置

3.4.7 insert() 函數用於將指定對象插入列表的指定位置

3.4.8 pop() 函數用於移除列表中的一個元素(默認最後一個元素),並且返回該元素的值

3.4.9 remove() 函數用於移除列表中某個值的第一個匹配項

3.4.10 reverse() 函數用於反向列表中元素

3.4.11 sort() 函數用於對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數

3.4.12 clear() 函數用於清空列表,類似於 del a[:]

3.4.13 copy() 函數用於複製列表,類似於 a[:]


4、Tuple(元組)

元組與列表不同之處:在於元組的元素不能修改。

元組使用{},列表使用[]。

元組創建很簡單,只需要在括弧中添加元素,並使用逗號隔開即可

元組中只包含一個元素時,需要在元素後面添加逗號,否則括弧會被當作運算符使用,具體看下面案例:

元組與字元串類似,下標索引也是從0開始,可以進行截取,組合等,在使用方法上面和列表還是有很多相同之處

4.1 修改元組:元組中的元素值是不允許修改的,但我們可以對元組進行連接組合

4.2 刪除元組:元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組

4.3 元組索引,截取:元祖索引跟列表很像這裡就不多介紹


5、Sets(集合)

集合(set)是一個無序不重複元素的序列,基本功能是進行測試和刪除重複元素,對於上網爬取數據需要的清洗數據方法比較類似。

可以使用大括弧 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。

無重複元素


6、Dictionary(字典):

6.1 字典是另一種可變容器模型,且可存儲任意類型對象。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})

鍵必須是唯一的,但值則不必。

值可以取任何數據類型,但鍵必須是不可變的,如字元串,數字或元組

定義

刪除查詢數據

修改數據

6.2字典內置函數&方法

6.2.1Python 字典 clear() 函數用於刪除字典內所有元素

以上就是用%d代替上面字典的數據,在遇見列表或者字典數據較長時,想得到列表長度和字典長度都可以用%d來代替

6.2.2字典 copy() 函數返回一個字典的淺複製

這個很好解釋,就想excel裡面的複製一個意思,在原有字典數據上複製一個出來變成一個新的字典,攜帶相同的數據,稱之為淺複製

這裡還涉及到一個直接賦值和深淺拷貝的一個區別,在於後期對原數據進行重新賦值,直接賦值的數據會隨之改變,但是深拷貝的值對應一級目錄不會隨之重新賦值而改變,具體可以看Runoob里的知識拓展

6.2.3 字典 fromkeys() 函數用於創建一個新字典,以序列seq中元素做字典的鍵,value為字典所有鍵對應的初始值

這裡要注意重點在於創建一個新的字典

6.2.4 字典 in 操作符用於判斷鍵是否存在於字典中,如果鍵在字典dict里返回true,否則返回false

if和else是後面判斷循環用的,這裡重點在於in,in也是關鍵詞,用處在於判斷是否存在,會是一個經常用到的關鍵詞

6.2.5 字典 items() 方法以列表返回可遍歷的(鍵, 值) 元組數組

通過items可以使字典返回到dict_items遍歷的鍵、值的形式,並不是列表值

6.2.6 字典 keys() 方法以列表返回一個字典所有的鍵

這裡返回的就是字典所有鍵的列表,但不是直接的列表

想變成直接的列表,需要再調用一個list函數,運行結果就可以變成一個列表了

6.2.7 字典 update() 函數把字典dict2的鍵/值對更新到dict里

字典更新,也可以稱之為增加,和列表的append 函數使用效果一致

6.2.8 字典 pop() 方法刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值

6.2.9 字典 popitem() 方法隨機返回並刪除字典中的一對鍵和值(一般刪除末尾對)。

如果字典已經為空,卻調用了此方法,就報出KeyError異常

同時字典還支持無限嵌套的,就行excel函數里if和count也支持嵌套,不過excel一般只支持15個內部嵌套,要換種方式使用函數,可以達到無限嵌套,具體看看下面的例子:

這裡就是使用了無限嵌套的方式,i是指上面的所值,citys()里指的是我們想選擇的對應值


7、布爾(Ture False)

8、空值(None)

斐波納契數列

對於這個我只是大概的了解了,還是得自己琢磨琢磨,有能詳細解釋的小夥伴們可以留言告訴我一下


二、條件控制(if elif else)

Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。

可以通過下圖來簡單了解條件語句的執行過程(這個和數學課本里判斷一個事件是否正確是一樣的道理):

有數據則會有輸出,不然直接結束運行

if的嵌套函數,稱之為函數裡面的函數,就像套娃一樣

條件判斷只要知道自己想得到什麼答案,理解判斷語句的用法就沒有什麼大問題了

以下兩個例子是給出的條件在不同的地方,所有最後的結果運行也不一樣


三、循環語句(for while)

這個是簡單的循環語句,就像是一個簡單的數列循環吧,用數列解釋是[(1+100)*100]/2

3.1 無限循環

查看教程可以使用ctrl+c退出循環,但是並不能退出,而要使用break和continue來停止循環

3.2 Break和continue函數的使用和區別:

break 語句可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行

變換大小寫

當循環到票蘋果公司的時候自動跳出了整個循環,執行後面的命令

continue語句被用來告訴Python跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環

當循環到蘋果時,自動跳出當前循環繼續下一輪循環

3.3 while 循環使用 else 語句:在 while … else 在條件語句為 false 時執行 else 的語句塊

3.4 for 語句:Python for循環可以遍歷任何序列的項目,如一個列表或者一個字元串

3.5 range()函數:如果你需要遍曆數字序列,可以使用內置range()函數。它會生成數列

指定區間生成數列

以上是結合range和len函數以遍歷一個序列的索引

創建了一個列表,前面字典的時候也講過,keys()+調用list函數也可以生成一個列表

1.5 pass 語句:Python pass是空語句,是為了保持程序結構的完整性。

pass 不做任何事情,一般用做佔位語句,如下實例:

拓展:使用內置 enumerate 函數進行遍歷

這個跟前面用range和len函數以遍歷一個序列的索引形式得出的結果是一致的


四、迭代器與生成器:iter() 和 next()

定義:迭代器是Python最強大的功能之一,是訪問集合元素的一種方式,是一個可以記住遍歷的位置的對象;迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退;字元串,列表或元組對象都可用於創建迭代器。

迭代器對象可以使用常規for語句進行遍歷,顯示出全部的數據

也可以通過next()函數,但是需要引入sys模塊,並且引用while函數,這個相對複雜一些,至於以上兩種方法的區別還需要仔細研究一下

4.1 生成器:使用了 yield 的函數被稱為生成器(generator)

跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。

在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回yield的值。並在下一次執行 next()方法時從當前位置繼續運行。

此處使用 yield 實現斐波那契數列,紅框部分翻譯出來了,但是還是有些不太理解,需要再琢磨琢磨

五、函數:

定義一個函數:

你可以定義一個由自己想要功能的函數,以下是簡單的規則

  • 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括弧 ()
  • 任何傳入參數和自變數必須放在圓括弧中間,圓括弧之間可以用於定義參數。
  • 函數的第一行語句可以選擇性地使用文檔字元串—用於存放函數說明。
  • 函數內容以冒號起始,並且縮進。
  • return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None

這個例子首先是先定義我們想要得出的結果,然後給出條件,根據條件和想得出的結果執行數據

定義函數,然後調用函數

使用函數

5.1 不可變數據類型和可變類型

字元串、數字,元祖這3種是不可變數據類型,其他的都是可變數據類型

不可變類型定義函數

可變類型定義函數

這個是根據課程輸出的,但是有點沒有理解為什麼函數內外取數一致,解釋說是傳入函數的和在末尾添加新內容的對象用的是同一個引用

5.2 必需參數

必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。

調用printme()函數,你必須傳入一個參數,不然會出現語法錯誤

在上面例子peintme函數里少傳入了str參數

這個是上面例子的正確輸入

5.3 關鍵字參數

關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。

使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值

這個就是沒有按順序輸入,但是參數值跟參數名相匹配,所以可以確定傳入的參數值

5.4 默認參數:調用函數時,如果沒有傳遞參數,則會使用默認參數

這裡有一個要注意的,默認參數要放在最後面,不然會出現報錯

5.5 不定長參數:一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數

基本語法如下:

def functionname([formal_args,] *var_args_tuple ):

"函數_文檔字元串"

function_suite

return [expression]

加了星號(*)的變數名會存放所有未命名的變數參數。如果在函數調用時沒有指定參數,它就是一個空元組。我們也可以不向函數傳遞未命名的變數。如下實例:

5.6 匿名函數:

python 使用 lambda 來創建匿名函數。

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。

  • lambda 只是一個表達式,函數體比 def 簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
  • 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。

5.7 return語句:return [表達式] 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None

5.8 Python的作用域一共有4種:

  • L (Local) 局部作用域
  • E (Enclosing) 閉包函數外的函數中
  • G (Global) 全局作用域
  • B (Built-in) 內建作用域

以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。

5.8.1 全局變數和局部變數

定義在函數內部的變數擁有一個局部作用域,定義在函數外的擁有全局作用域。

局部變數只能在其被聲明的函數內部訪問,而全局變數可以在整個程序範圍內訪問。調用函數時,所有在函數內聲明的變數名稱都將被加入到作用域

使用global關鍵字,可以修改全局變數 num

使用nolocal關鍵字,可以修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變數

六、數據結構

堆棧:後進先出

隊列:先進先出

排序字典OrderedDict:

計數器Counter:

七、模塊:我們的腳本是用 python 解釋器來編程,把這一系列的定義保存在py後綴的文件夾裡面,類似於Excel保存的文件一樣,再次打開定義的數據會再次出現

看看下面的兩個練習題就明白了:

這個是引入函數,然後查詢使用這個函數所在的路徑在哪裡

這個是一個第三方模塊的引用,進入Excel文件數據,把內容用Python的形式表達出來

以上就是我整個Python的學習和思路了,整個知識梳理是按照學習的過程來寫的,有一些自己的心得體會,現在學習感覺是學會了,但是真的把學到的可以完全運用起來的話,還需要多加練習,熟悉代碼,熟悉代碼的運用原理。

因為自己工作中Excel用的比較多,所以會拿Python里的一些相互對比,Excel也是用函數寫的,只是運行數據太大比較容易卡,相對於Python在一些使用上面還是有相似之處,可以進行對比。這樣梳理出來也會更容易相互理解。


推薦閱讀:

R語言實戰第八章:回歸
SQL初級數據分析(基於Microsoft Access)
一篇文章入門Python
大數據之數據分析精進之路:起跑
Python 數據分析學習路線

TAG:數據分析 |