《python 與資料探勘 》一 2 3 流程控制

2021-09-23 16:41:51 字數 4906 閱讀 3410

流程控制是一門程式語言的基本,掌握python流程控制語句就已經能夠實現很多演算法了。本節主要介紹python的條件分支結構if語句和兩種主要迴圈結構while語句和for語句,並在最後詳細講解python函式的用法。如果讀者有一定的程式設計基礎,對條件分支、迴圈和函式這3種結構比較熟悉,那麼本節的內容是簡單的。如果讀者初入程式設計,請認真閱讀本節,這些內容是你日後程式設計的基礎。

print "布林表示式"

print true,false

# result: true,false

print true == 1

# result: true

print true + 2

# result: 3

print true + false*3

# result: 1

print 3 > 2

# result: true

print (1 < 3)*10

# reuslt: 10

***詳見:示例程式/code/2-3.py

2.條件分支

到目前為止的程式都是一條一條語句順序執行的,現在我們的程式開始有了選擇和判斷的能力。if語句能夠設定分支,有且只有1條分支會被執行,這和我們日常語言中的「如果」是一樣的。if語句的一般格式如下:

if 布林表示式1:

分支一
elif 布林表示式2:

分支二
else:

分支三
程式會先計算第乙個布林表示式,如果結果為真,則執行第乙個分支的所有語句。如果為假,則計算第二個布林表示式,如果第二個布林表示式結果為真,則執行第二個分支的所有語句。如果結果仍然為假,則執行第三個分支的所有語句。如果只有兩個分支,那麼不需要elif,直接寫else即可,如果有更多的分支,那麼就需要新增更多的elif語句。python中沒有switch和case語句,多路分支只能通過if-elif-else來實現。注意整個分支結構中是有嚴格的退格縮排要求的。**清單2-3給出一些例子。

**清單2-3 條件分支

print "條件分支"

# 例1 判斷天氣

weather = 'sunny'

if weather =='sunny':

print "shopping"

elif weather =='cloudy':

print "playing football"

else:

print "learning python"

#result: shopping

# 例2    選擇兩個數的較大者

import math

a = math.pi

b = math.sqrt(9.5)

if a>b:

print a

else:

print b

# result: 3.14159265359

# 例3 3個數簡單排序

first = 1

second = 2

third = 3

if second',second,'>',third

# result: 3 > 2 > 1

***詳見:示例程式/code/2-3.py

while語句

計算機比人類愚蠢得多,但計算機的優勢是它能夠無休止地進行計算。2023年3月谷歌的人工智慧機器alphago擊敗棋力世界排名前十的李世石,這個新聞引起了強大轟動。很多人不理解人工智慧為何能夠超越人腦。可以這樣簡單地理解,alphago能夠日夜不停地自我對弈,不斷提高實力,而且速度比人類快得多,它的勝利是可以預見的。

回歸正題,似乎我們現有的知識要讓程式重複地做一件事,就只能重複地寫相同的**,顯然這不合理。為此,我們需要掌握乙個重要的概念——迴圈。while迴圈是最常用的迴圈之一,它的格式如下:

while 布林表示式:

程式段
只要布林表示式為真,那麼程式段將會被執行,執行完畢後,再次計算布林表示式,如果結果仍然為真,那麼再次執行程式段,直至布林表示式為假。舉乙個例子,如果要計算1到1000的和是多少,那麼可以:

a=1000

s=0while a:

s+=a

a-=1

break和continue

下面看兩個簡單的語句,它們只有巢狀在迴圈中才起作用,分別是break語句和continue語句。它們的作用如下:

break:跳出最內層迴圈。

continue:跳到最內層迴圈的首行。

簡單來說,break用於中止迴圈,注意,如果乙個while語句巢狀在另乙個while語句內,即程式中有雙層迴圈,內層迴圈中的break語句僅僅退出內層迴圈並回到外層迴圈。而continue語句是中斷當前的迴圈並回到迴圈段的開頭重新執行程式。首次接觸continue的讀者可能比較難理解,**清單2-4舉出了一些例子。

**清單2-4 while語句

print '''while語句'''

# 例1 1到1000求和

a = 1000

s = 0

while a:

s+=a

a-=1

print s

#result: 500500

# 例2 簡單計算

while true:

s = input('1+2=')

if s ==3:

print '答案正確'

break

if s>=0 and s<=9:

continue

print '答案是個位數'

***詳見:示例程式/code/2-3.py

for迴圈在python中是乙個通用的序列迭代器,可以遍歷任何有序的序列。for語句可作用於字串、列表、元組,這些資料結構在2.4節將會詳細介紹,本節我們的例子需要用到這些資料結構。程式語言的學習是乙個迴圈的學習過程,與其他學科不同,程式語言的知識是相互緊扣的。讀者閱讀本節有困難的話可以先跳到2.4節。

for語句

python中的for語句接受可迭代物件,如序列和迭代器作為其引數,每次迴圈調取其中乙個元素。在**清單2-5中,我們給出了for迴圈對字串、列表的遍歷。python的for迴圈看上去像偽**,非常簡潔,如**清單2-5所示。

**清單2-5 for語句

print '''簡單for迴圈'''

# 對列表和字串進行迭代

for a in ['e','f','g']:

print a,

# result:e f g

print

for a in 'string':

print a,

# result:string

***詳見:示例程式/code/2-3.py

range()函式

如果你希望python能像c語言的格式進行迴圈,就需要乙個數字序列,range()函式能夠快速生成乙個數字序列。如:

range(5)

[0,1,2,3,4]

那麼python中for i in range(5)的效果和c中for(i=0;i<5;i++)的效果是一樣的。而range(a,b)能夠返回列表[a,a+1,…,b-1](注意不包含b),這樣for迴圈就可以從任意起點開始,任意終點結束。range()函式經常和len()函式一起用於遍歷整個序列。len()函式能夠返回乙個序列的長度,for i in range(len(l))能夠迭代整個列表l。雖然直接使用for迴圈似乎也可以實現這個目的,但是直接使用for迴圈難以對序列進行修改(因為每次迭代調取的元素並不是序列元素的引用),而通過range()和len()函式可以快速通過索引訪問序列並對其進行修改。請看下面的**清單2-6:

**清單2-6 range()函式

print '''range()函式'''

print range(2,9)

# result: [2, 3, 4, 5, 6, 7, 8]

print range(2,9,3) #相鄰元素的間隔為3

# result: [2, 5, 8]

print '-'*70

# 直接使用for迴圈難以改變序列元素

l = [1,2,3]

for a in l:

a+=1 #a不是引用,l中對應的元素沒有發生改變

print l

# result: [1,2,3]

# range()與len()函式遍歷序列並修改元素

for i in range(len(l)):

l[i]+=1 #通過索引訪問

print l

# result: [2,3,4]

***詳見:示例程式/code/2-3.py

3.迴圈中的else語句

for迴圈同樣支援break和continue語句。迴圈語句可以有乙個else語句,當for迴圈迭代整個列表後或while迴圈條件變為假時,迴圈並非通過break語句終止時,便會執行這個else語句。下面給出乙個實現簡單搜尋質數的例子(見**清單2-7)。

**清單2-7 迴圈中的else語句

print '''迴圈中的else語句'''

# 簡單搜尋質數

for n in range(2,10):

for x in range(2,n):

if n%x ==0: # 含有非普通因子

print n,'equals',x,'*',n/x

break

else:

print n,'是乙個質數' # 僅含有普通因子,說明這是乙個質數

***詳見:示例程式/code/2-3.py

流資料探勘 三

本篇主要介紹流資料的研究內容。資料流處理準備知識。1.資料流模型的研究 資料流模型是對資料流的邏輯抽象,合理的資料流模型,可以改善資料流的處理效率,是設計高效的處理演算法的基礎。資料流分析模型主要包括 滑動視窗模型 sliding window model 界標模型 landmark model 和...

python與資料探勘基礎

進行txt檔案資料讀取,資料為uci資料庫的 氣病症 病馬資料,資料見 data horsecolic.txt.資料有多行,每行有22個資料,前21個為馬的病症資料,最後乙個時該馬的標籤,判斷其患病與否。實驗的要求是將所有行的前21個資料儲存到乙個二維列表dataarr中,而標籤資料單獨儲存在乙個列...

python基礎與資料探勘

資料探勘的流程 明確目標,資料蒐集,資料清洗,構建模型,模型評估,應用部署。正向單索引 如上圖所示,變數list1是乙個含有7個元素的列表,包含字串 字串必須用引號引起來 數值和列表。用print列印,列表中最後乙個元素正好又是乙個列表 巢狀列表 所以需要取出巢狀列表中的元素就需要兩層索引來實現。負...