日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

零基础入门Python:基本命令、函数、数据结构

發(fā)布時間:2025/3/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础入门Python:基本命令、函数、数据结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


導讀:本文對Python的基本使用做一個簡單的介紹。限于篇幅,本文不可能詳細講解Python的使用,只是針對本書涉及的數(shù)據(jù)挖掘案例所用到的代碼進行基本講解。如果讀者是初步接觸Python,并且使用Python的目的就是數(shù)據(jù)挖掘,那么相信本文的介紹對你來說是比較充足的了。

作者:張良均 譚立云 劉名軍 江建明

來源:大數(shù)據(jù)DT(ID:hzdashuju)

01 運行方式

本文示例代碼使用的Python版本為Python 3.6。運行Python代碼有兩種方式:

  • 一種方式是啟動Python,然后在命令窗口下直接輸入相應的命令;

  • 另一種方式就是將完整的代碼寫成.py腳本,如hello.py,然后在對應的路徑下通過python hello.py執(zhí)行。

hello.py腳本中的代碼如下:

#?hello.py print('Hello?World!')

腳本的執(zhí)行結(jié)果如圖所示。

▲Hello.py腳本執(zhí)行結(jié)果

在編寫腳本的時候,可以添加適當?shù)淖⑨尅T诿恳恍兄?#xff0c;可以用井號“#”來添加注釋,添加單行注釋的方法如下:

a?=?2?+?3?#?這句命令的意思是將2+3的結(jié)果賦值給a

如果注釋有多行,可以在兩個“'''”(三個英文狀態(tài)單引號)之間添加注釋內(nèi)容,添加多行注釋的方法如下:

a?=?2?+?3 ''' 這里是Python的多行注釋。 這里是Python的多行注釋。 '''

如果腳本中帶有中文(中文注釋或者中文字符串,中文字符串要在前面加u),那么需要在文件頭注明編碼,并且還要將腳本保存為utf-8編碼格式,注明編碼的方法如下:

#?-*-?coding:?utf-8?-*print('世界,你好!')

02 基本命令

1. 基本運算

初步認識Python時,可以把它當作一個方便的計算器來看待。讀者可以打開Python,試著輸入代碼清單1所示的命令。

  • 代碼清單1:Python基本運算

a?=?2 a?*?2 a?**?2

代碼清單1所示的命令是Python幾個基本運算,第一個命令是賦值運算,第二個命令是乘法運算,最后一個命令是冪運算(即a2),這些基本上是所有編程語言通用的。不過Python支持多重賦值,方法如下:

a,?b,?c?=?2,?3,?4

這句多重賦值命令相當于如下命令:

a?=?2 b?=?3 c?=?4

Python支持對字符串的靈活操作,如代碼清單2所示。

  • 代碼清單2:Python字符串操作

s?=?'I?like?python' s?+?'?very?much'??#?將s與'?very?much'拼接,得到'I?like?python?very?much' s.split('?')?#?將s以空格分割,得到列表['I',?'like',?'python']

2. 判斷與循環(huán)

判斷和循環(huán)是所有編程語言的基本命令,Python的判斷語句格式如下:

if?條件1:語句2 elif?條件3:語句4 else:語句5

需要特別指出的是,Python一般不用花括號{},也沒有end語句,它用縮進對齊作為語句的層次標記。同一層次的縮進量要一一對應,否則會報錯。下面是一個錯誤的縮進示例,如代碼清單3所示。

  • 代碼清單3:錯誤的縮進

if?a==1:print(a)#?縮進兩個空格 else:print('a不等于1')#?縮進三個空格

不管是哪種語言,正確的縮進都是一個優(yōu)雅的編程習慣。

相應地,Python的循環(huán)有while循環(huán)和for循環(huán),while循環(huán)如代碼清單4所示。

  • 代碼清單4:while循環(huán)

s,k?=?0,0 while?k?<?101:#?該循環(huán)過程就是求1+2+3+...+100k?=?k?+?1s?=?s?+?k print(s)

for循環(huán)如代碼清單5所示。

  • 代碼清單5:for循環(huán)

s?=?0 for?k?in?range(101):?#?該循環(huán)過程也是求1+2+3+...+100s?=?s?+?k print(s)

這里我們看到了in和range語法。in是一個非常方便而且非常直觀的語法,用來判斷一個元素是否在列表/元組中;range用來生成連續(xù)的序列,一般語法為range(a, b, c),表示以a為首項、c為公差且不超過b-1的等差數(shù)列,如代碼清單6所示。

  • 代碼清單6:使用range生成等差數(shù)列

s?=?0 if?s?in?range(4):print('s在0,?1,?2,?3中') if?s?not?in?range(1,?4,?1):print('s不在1,?2,?3中')

3. 函數(shù)

Python用def來自定義函數(shù),如代碼清單7所示。

  • 代碼清單7:自定義函數(shù)

def?add2(x):return?x+2 print(add2(1))?#?輸出結(jié)果為3

與一般編程語言不同的是,Python的函數(shù)返回值可以是各種形式,可以返回列表,甚至返回多個值,如代碼清單8所示。

  • 代碼清單8:返回列表和返回多個值的自定義函數(shù)

def?add2(x?=?0,?y?=?0):??#?定義函數(shù),同時定義參數(shù)的默認值return?[x+2,?y+2]??#?返回值是一個列表 def?add3(x,?y):return?x+3,?y+3??#?雙重返回 a,?b?=?add3(1,2)?#?此時a=4,b=5

有時候,像定義add2()這類簡單的函數(shù),用def來正式地寫個命名、計算和返回顯得稍有點麻煩,Python支持用lambda對簡單的功能定義“行內(nèi)函數(shù)”,這有點像MATLAB中的“匿名函數(shù)”,如代碼清單9所示。

  • 代碼清單9:使用lambda定義函數(shù)

f?=?lambda?x?:?x?+?2??#?定義函數(shù)f(x)=x+2 g?=?lambda?x,?y:?x?+?y?#?定義函數(shù)g(x,y)=x+y

03 數(shù)據(jù)結(jié)構(gòu)

Python有4個內(nèi)建的數(shù)據(jù)結(jié)構(gòu)—List(列表)、Tuple(元組)、Dictionary(字典)以及Set(集合),它們可以統(tǒng)稱為容器(Container),因為它們實際上是一些“東西”組合而成的結(jié)構(gòu),而這些“東西”可以是數(shù)字、字符、列表或者是它們之間幾種的組合。

通俗來說,容器里邊是什么都行,而且容器里邊的元素類型不要求相同。

1. 列表/元組

列表和元組都是序列結(jié)構(gòu),它們本身很相似,但又有一些不同的地方。

從外形上看,列表與元組存在一些區(qū)別是。列表是用方括號標記的,如a = [1, 2, 3],而元組是用圓括號標記的,如b = (4, 5, 6),訪問列表和元組中的元素的方式都是一樣的,如a[0]等于1,b[2]等于6,等等。剛剛已經(jīng)談到,容器里邊是什么都行,因此,以下定義也是成立的:

c?=?[1,?'abc',?[1,?2]] ''' c是一個列表,列表的第一個元素是整型1,第二個是字符串'abc',第三個是列表[1,?2] '''

從功能上看,列表與元組的區(qū)別在于:列表可以被修改,而元組不可以。比如,對于a = [1, 2, 3],那么語句a[0] = 0,就會將列表a修改為[0, 2, 3],而對于元組b = (4, 5, 6),語句b[0] = 1就會報錯。

要注意的是,如果已經(jīng)有了一個列表a,同時想復制a,并命名為變量b,那么b = a是無效的,這時候b僅僅是a的別名(或者說引用),修改b也會修改a。正確的復制方法應該是b = a[:]。

跟列表有關(guān)的函數(shù)是list,跟元組有關(guān)的函數(shù)是tuple,它們的用法和功能幾乎一樣,都是將某個對象轉(zhuǎn)換為列表/元組,如list('ab')的結(jié)果是['a', 'b'],tuple([1, 2])的結(jié)果是(1, 2)。一些常見的與列表/元組相關(guān)的函數(shù)如下所示。

  • cmp(a, b):比較兩個列表/元組的元素

  • len(a):列表/元組元素個數(shù)

  • max(a):返回列表/元組元素最大值

  • min(a):返回列表/元組元素最小值

  • sum(a):將列表/元組中的元素求和

  • sorted(a):對列表的元素進行升序排序

此外,作為對象來說,列表本身自帶了很多實用的方法(元組不允許修改,因此方法很少),如下所示。

  • a.append(1):將1添加到列表a末尾

  • a.count(1):統(tǒng)計列表a中元素1出現(xiàn)的次數(shù)

  • a.extend([1, 2]):將列表[1, 2]的內(nèi)容追加到列表a的末尾

  • a.index(1):從列表a中找出第一個1的索引位置

  • a.insert(2, 1):將1插入列表a中索引為2的位置

  • a.pop(1):移除列表a中索引為1的元素

最后,不能不提的是“列表解析”這一功能,它能夠簡化我們對列表內(nèi)元素逐一進行操作的代碼。使用append函數(shù)對列表元素進行操作,如代碼清單10所示。

  • 代碼清單10:使用append函數(shù)對列表元素進行操作

a?=?[1,?2,?3] b?=?[] for?i?in?a:b.append(i?+?2)

使用列表解析進行簡化,如代碼清單11所示。

  • 代碼清單11:使用列表解析進行簡化

a?=?[1,?2,?3] b?=?[i+2?for?i?in?a]

這樣的語法不僅方便,而且直觀。這充分體現(xiàn)了Python語法的人性化。在本書中,我們將會較多地用到這樣簡潔的代碼。

2. 字典

Python引入了“自編”這一方便的概念。從數(shù)學上來講,它實際上是一個映射。通俗來講,它也相當于一個列表,然而它的“下標”不再是以0開頭的數(shù)字,而是自己定義的“鍵”(Key)。

創(chuàng)建一個字典的基本方法如下:

d?=?{'today':20,?'tomorrow':30}

這里的today、tomorrow就是字典的“鍵”,它在整個字典中必須是唯一的,而20、30就是“鍵”對應的值。訪問字典中元素的方法也很直觀,如代碼清單12所示。

  • 代碼清單12:訪問字典中的元素

d['today']????#?該值為20 d['tomorrow']?#?該值為30

要創(chuàng)建一個字典,還有其他一些比較方便的方法來,如通過dict()函數(shù)轉(zhuǎn)換,或者通過dict.fromkeys來創(chuàng)建,如代碼清單13所示。

  • 代碼清單13:通過dict或者dict.fromkeys創(chuàng)建字典

dict([['today',?20],?['tomorrow',?30]])??#?也相當于{'today':20,?'tomorrow':30} dict.fromkeys(['today',?'tomorrow'],?20)?#?相當于{'today':20,?'tomorrow':20}

很多字典相關(guān)的函數(shù)和方法與列表相同,在這里就不再贅述了。

3. 集合

Python內(nèi)置了集合這一數(shù)據(jù)結(jié)構(gòu),這一概念跟數(shù)學上的集合的概念基本上是一致的,它跟列表的區(qū)別在于:①它的元素是不重復的,而且是無序的;②它不支持索引。一般我們通過花括號{}或者set()函數(shù)來創(chuàng)建一個集合,如代碼清單14所示。

  • 代碼清單14:創(chuàng)建集合

s?=?{1,?2,?2,?3}??#?注意2會自動去重,得到{1,?2,?3} s?=?set([1,?2,?2,?3]) #?同樣地,它將列表轉(zhuǎn)換為集合,得到{1,?2,?3}

集合具有一定的特殊性(特別是無序性),因此集合有一些特別的運算,如代碼清單15所示。

  • 代碼清單15:集合運算

a?=?t?|?s??#?t和s的并集 b?=?t?&?s??#?t和s的交集 c?=?t?–?s??#?求差集(項在t中,但不在s中) d?=?t?^?s??#?對稱差集(項在t或s中,但不會同時出現(xiàn)在二者中)

4. 函數(shù)式編程

函數(shù)式編程(Functional programming)或者函數(shù)程序設計又稱泛函編程,是一種編程范型,它將計算機運算視為數(shù)學上的函數(shù)計算,并且避免使用程序狀態(tài)以及易變對象。

簡單來講,函數(shù)式編程是一種“廣播式”編程,通常是結(jié)合前面提到的lambda定義函數(shù)用于科學計算中,會顯得簡潔方便。

在Python中,函數(shù)式編程主要由幾個函數(shù)的使用構(gòu)成:lambda、map、reduce、filter,其中l(wèi)ambda前面已經(jīng)介紹過,主要用來自定義“行內(nèi)函數(shù)”,所以現(xiàn)在我們逐一介紹后面3個。

(1)map函數(shù)

假設有一個列表a = [1, 2, 3],要給列表中的每個元素都加2得到一個新列表,利用前面已經(jīng)談及的列表解析,我們可以這樣寫,如代碼清單16所示。

  • 代碼清單16:使用列表解析操作列表元素

b?=?[i+2?for?i?in?a]

而利用map函數(shù)我們可以這樣寫,如代碼清單17所示。

  • 代碼清單17:使用map函數(shù)操作列表元素

b?=?map(lambda?x:?x+2,?a) b?=?list(b)??#?結(jié)果是[3,?4,?5]

也就是說,我們首先要定義一個函數(shù),然后再用map命令將函數(shù)逐一應用到(map)列表中的每個元素,最后返回一個數(shù)組。map命令也接受多參數(shù)的函數(shù),如map(lambda x,y: x*y, a, b)表示將a、b兩個列表的元素對應相乘,把結(jié)果返回新列表。

也許有的讀者會有疑問:有了列表解析,為什么還要有map命令呢?其實列表解析雖然代碼簡短,但是本質(zhì)上還是for命令,而Python的for命令效率并不高,而map函數(shù)實現(xiàn)了相同的功能,并且效率更高,原則上來說,它的循環(huán)命令是C語言速度的。

(2)reduce函數(shù)

reduce有點像map,但map用于逐一遍歷,而reduce用于遞歸計算。在Python 3.x中,reduce函數(shù)已經(jīng)被移出了全局命名空間,被置于fuctools庫中,使用時需要通過from fuctools import reduce引入reduce。先給出一個例子,這個例子可以算出n的階乘,如代碼清單18所示。

  • 代碼清單18:使用reduce計算n的階乘

from?fuctools?import?reduce#?導入reduce函數(shù) reduce(lambda?x,y:?x*y,?range(1,?n+1))

其中range(1, n+1)相當于給出了一個列表,元素是1~n這n個整數(shù)。lambda x,y: x*y構(gòu)造了一個二元函數(shù),返回兩個參數(shù)的乘積。

reduce命令首先將列表的頭兩個元素作為函數(shù)的參數(shù)進行運算,然后將運算結(jié)果與第三個數(shù)字作為函數(shù)的參數(shù),然后再將運算結(jié)果與第四個數(shù)字作為函數(shù)的參數(shù)……依此遞推,直到列表結(jié)束,返回最終結(jié)果。如果用循環(huán)命令,那就要寫成代碼清單19所示的形式。

  • 代碼清單19:使用循環(huán)命令計算n的階乘

s?=?1 for?i?in?range(1,?n+1):s?=?s?*?i

(3)filter

顧名思義,它是一個過濾器,用來篩選列表中符合條件的元素,如代碼清單20所示。

  • 代碼清單20:使用filter篩選列表元素

b?=?filter(lambda?x:?x?>?5?and?x?<?8,?range(10)) b?=?list(b)??#?結(jié)果是[6,?7]

使用filter首先需要一個返回值為bool型的函數(shù),如上述“l(fā)ambda x: x > 5 and x < 8”定義了一個函數(shù),判斷x是否大于5且小于8,然后將這個函數(shù)作用到range(10)的每個元素中,如果為True,則“挑出”那個元素,最后將滿足條件的所有元素組成一個列表返回。

當然,上述filter語句,也可以使用列表解析,如代碼清單21所示。

  • 代碼清單21:使用列表解析篩選

b?=?[i?for?i?in?range(10)?if?i?>?5?and?i?<?8]

它并不比filter語句復雜。但是要注意,我們使用map、reduce或filter,最終目的是兼顧簡潔和效率,因為map、reduce或filter的循環(huán)速度比Python內(nèi)置的for循環(huán)或while循環(huán)要快得多。

04 庫的導入與添加

前面我們已經(jīng)講述了Python基本平臺的搭建和使用,然而僅在默認情況下它并不會將所有的功能加載進來。我們需要把更多的庫(或者叫作模塊、包等)加載進來,甚至需要安裝第三方擴展庫,以豐富Python的功能,實現(xiàn)我們的目的。

1. 庫的導入

Python本身內(nèi)置了很多強大的庫,如數(shù)學相關(guān)的math庫,可以為我們提供更加豐富且復雜的數(shù)學運算,如代碼清單22所示。

  • 代碼清單22:使用math庫進行數(shù)學運算

import?math math.sin(1)??#?計算正弦 math.exp(1)??#?計算指數(shù) math.pi??#?內(nèi)置的圓周率常數(shù)

導入庫的方法,除了直接“import庫名”之外,還可以為庫起一個別名,如代碼清單23所示。

  • 代碼清單23:使用別名導入庫

import?math?as?m m.sin(1)?#?計算正弦

此外,如果并不需要導入庫中的所有函數(shù),可以特別指定導入函數(shù)的名稱,如代碼清單24所示。

  • 代碼清單24:通過名稱導入指定函數(shù)

from?math?import?exp?as?e?#?只導入math庫中的exp函數(shù),并起別名e e(1)??#?計算指數(shù) sin(1)??#?此時sin(1)和math.sin(1)都會出錯,因為沒被導入

若直接導入庫中的所有函數(shù),如代碼清單25所示。

  • 代碼清單25:導入庫中所有函數(shù)

#?直接導入math庫,也就是去掉math.,但如果大量地這樣引入第三庫,就容易引起命名沖突 from?math?import?* exp(1) sin(1)

我們可以通過help('modules')命令來獲得已經(jīng)安裝的所有模塊名。

2. 導入future特征(For 2.x)

Python 2.x與Python 3.x之間的差別不僅是在內(nèi)核上,也部分地表現(xiàn)在代碼的實現(xiàn)中。比如,在Python 2.x中,print是作為一個語句出現(xiàn)的,用法為print a;但是在Python 3.x中,它是作為函數(shù)出現(xiàn)的,用法為print(a)。

為了保證兼容性,本文的基本代碼是基于Python 3.x的語法編寫的,而使用Python 2.x的讀者,可以通過引入future特征的方式兼容代碼,如代碼清單26所示。

  • 代碼清單26:導入future特征

#?將print變成函數(shù)形式,即用print(a)格式輸出 from?__future__?import?print_function#?3.x的3/2=1.5,3//2才等于1;2.x中3/2=1 from?__future__?import?division

3. 添加第三方庫

Python自帶了很多庫,但不一定可以滿足我們的需求。就數(shù)據(jù)分析和數(shù)據(jù)挖掘而言,還需要添加一些第三方庫來拓展它的功能。這里簡單介紹一下第三方庫的安裝。

安裝第三方庫有多種方法,如下所示。

  • 下載源代碼自行安裝:安裝靈活,但需要自行解決上級依賴問題

  • 用pip命令安裝:比較方便,自動解決上級依賴問題

  • 用easy_install命令安裝:比較方便,自動解決上級依賴問題,比pip稍弱

  • 下載編譯好的文件包:一般是Windows系統(tǒng)才提供現(xiàn)成的可執(zhí)行文件包

  • 系統(tǒng)自帶的安裝方式:Linux系統(tǒng)或Mac系統(tǒng)的軟件管理器自帶了某些庫的安裝方式

這些安裝方式已在《干貨收藏!一文看懂8個常用Python庫從安裝到應用》中詳細介紹。

有關(guān)Python及數(shù)據(jù)分析的更多內(nèi)容,歡迎各位4月11日19:30來直播間交流:

關(guān)于作者:張良均,資深大數(shù)據(jù)挖掘與分析專家、模式識別專家、AI技術(shù)專家。有10余年大數(shù)據(jù)挖掘與分析經(jīng)驗,擅長Python、R、Hadoop、Matlab等技術(shù)實現(xiàn)的數(shù)據(jù)挖掘與分析,對機器學習等AI技術(shù)驅(qū)動的數(shù)據(jù)分析也有深入研究。

本文摘編自《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》(第2版),經(jīng)出版方授權(quán)發(fā)布。

延伸閱讀《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》

點擊上圖了解及購買

轉(zhuǎn)載請聯(lián)系微信:DoctorData

推薦語:暢銷書全新升級,第1版銷售超過10萬冊,被國內(nèi)100余所高等院校采用為教材,同時被廣大數(shù)據(jù)科學工作者奉為經(jīng)典,是該領(lǐng)域公認的事實標準。作者在大數(shù)據(jù)挖掘與分析等領(lǐng)域有10余年的工程實踐、教學和創(chuàng)辦企業(yè)的經(jīng)驗,不僅掌握行業(yè)的最新技術(shù)和實踐方法,而且洞悉學生和老師的需求與痛點。

有話要說????

Q:?這些基本操作你都搞定了嗎

歡迎留言與大家分享

猜你想看????

  • 神操作:教你用Python識別惡意軟件

  • 用戶畫像標簽體系包括哪些維度?有哪些應用場景?(附完整導圖)

  • 創(chuàng)建字節(jié)跳動之前,張一鳴讀過哪些硬核技術(shù)書?

  • 手把手教你做用戶畫像:3種標簽類型、8大系統(tǒng)模塊

更多精彩????

在公眾號對話框輸入以下關(guān)鍵詞

查看更多優(yōu)質(zhì)內(nèi)容!

PPT?|?讀書?|?書單?|?硬核?|?干貨?

大數(shù)據(jù)?|?揭秘?|?Python?|?可視化

AI?|?人工智能?|?5G?|?中臺

機器學習?|?深度學習?|?神經(jīng)網(wǎng)絡

合伙人?|?1024?|?大神?|?數(shù)學

據(jù)統(tǒng)計,99%的大咖都完成了這個神操作

????

總結(jié)

以上是生活随笔為你收集整理的零基础入门Python:基本命令、函数、数据结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。