Python的range函數與for循環語句

2021-01-13 米粒教育

本篇介紹Python for循環語句和range函數的使用,文中主要討論for循環語句,Python的for循環語句類似於shell或是腳本語言中的foreach循環,可以迭代序列對象。使用range函數可以讓Python的for循環提供類似於傳統的for循環功能。通過本篇的學習,可以達成如下目標。

● 使用for循環語句迭代序列對象

● 掌握range函數的使用方法

Python提供的另外一個循環結構就是for循環語句,Python提供的for循環語句和Java、C++等程式語言提供的for語句不同,Python中的for循環更像是shell或是腳本語言中的foreach循環。它可以遍歷如列表、元組、字符串等序列成員(列表、元組、字符串也稱為序列),也可以用在列表解析和生成器表達式中。

1、 使用序列項迭代序列對象

通過for循環可以迭代序列對象的所有成員,並在迭代結束後,自動結束循環,其語法如下:

for iter_var in list:

語句塊;

其中,iter_var是迭代變量,指向序列對象的元素,list是可迭代對象。語句塊是循環體,在循環體中可以使用iter_var訪問可迭代對象的元素。

例1:使用Pyhton列表建立一個同學花名冊,使用for循環迭代輸出花名冊內容。

程序初始化一個Python列表,列表中存儲姓名,然後使用for循環語句遍歷Python列表,獲取列表中的每個元素並輸出。程序流程圖如下:

圖1 例1流程圖

流程圖用到了for循環控制,迭代花名冊列表,並輸出列表元素,迭代結束後自動退出循環,程序結束。

下面根據圖1所示的流程圖給出例1程序代碼。

在for語句的每次循環中,item變量被設置為student列表的當前元素,被print語句使用。

例1輸出結果如下圖所示。

當用for循環迭代字符串時,迭代變量只會包含單個字符。遍歷字符串序列的功能並不常用,在字符串裡查找字符時,更常用的是用in操作符來判斷一個子串或單個字符是否屬於某個字符串。

例2:輸出一個字符串的所有字母序列。

程序初始化一個字符串,然後使用for循環語句遍歷這個字符串,獲取字符串中的單個字符,並用print語句輸出。流程圖與列1相似,這裡不再繪製流程圖。程序代碼如下:

例2輸出結果如下圖所示。

2、 使用序列索引迭代序列對象

例1中使用序列項迭代列表對象,for循環中的in子句會判斷當前序列項是否在序列中,如果屬於列表則繼續循環,否則退出循環。在for循環語句中,也可以使用序列索引來迭代列表。使用序列索引迭代序列對象的語法如下:

for index in range(len(list)):

語句塊;

其中,index為序列的索引項,range是一個計數函數,後面會詳解解釋,len獲取序列對象的長度。

例1使用序列索引遍歷列表代碼如下:

使用range函數可以得到用來迭代index的索引數列表,使用序列對象的訪問運算符「[]」,就可以訪問對應的序列對象。

3、使用枚舉函數迭代序列對象

枚舉函數enumerate()用於將序列對象轉換為一個索引序列,並返回序列對象的索引和成員,一般在for循環中得到序列對象的索引計數和序列對象成員。使用枚舉函數迭代序列對象的語法如下:

for index, iter_var in enumerate (list,start_index=0):

語句塊;

其中,index為enumerate返回的索引計數,iter_var為與索引計數對應的序列對象成員,list為待遍歷的序列對象,start_index為返回的起始索引計數,起始索引計數默認為0。

例1使用枚舉函數遍歷列表代碼如下:

使用enumerate函數獲取student的索引計數,索引計數從0開始,也可以指定起始索引計數。

索引計數從2開始,輸出結果如下圖所示。

4、 關於range函數

前面介紹的for循環是一種迭代的循環機制,和Java、C++等傳統程式語言的for循環有所不同。那麼,Python能不能提供類似於傳統的for循環功能呢?實現循環從一個數字開始計數到另一個數字,一旦到達最後的數字或者某個條件不再滿足就立刻退出循環。

Python提供的range函數可以讓for循環實現上面的功能,可以讓for循環從0到10計數,或者從10到100每次遞增5。range函數的語法如下:

range(start, end, step=1)

range會返回一個整數序列,statr為整數序列的起始值,end為整數序列的結束值,在生成的整數序列中,不包含結束值。step為整數序列中遞增的步長,默認為1。

例如:

輸出結果如下圖所示。

range(0,5)生成包含0、1、2、3、4的整數序列,Python會把生成的這個整數序列用於for循環語句,循環從0到5,不包括5,步長為1,循環次數為5。

range(10,30,5)生成包含10、15、20、25的整數序列,循環從10到25,不包括30,步長為5,循環次數為4。可以看出,當range用於for循環時,循環次數取決於range返回的整數序列的長度,每次循環的索引計數為整數序列的值。

例3:使用for循環求自然數的階乘。

自然數的階乘是所有小於及等於該自然數的積,求自然數k的階乘,就是從1開始順序乘以小於等於k的所有自然數,也包括k。程序可以通過range函數返回小於所求自然數的整數序列,然後迭代range函數返回的整數序列。程序代碼如下:

課程小結

(1)Python提供的for循環語句和Java、C++等程式語言提供的for語句不同,Python中的for更像是shell或是腳本語言中的foreach循環。它可以遍歷如列表、元組、字符串等序列成員(列表、元組、字符串也稱為序列),也可以用在列表解析和生成器表達式中。

(2)Pyhton的for循環應用range函數可以實現傳統的for循環功能,實現循環從一個數字開始計數到另一個數字,一旦到達最後的數字或者某個條件不再滿足就立刻退出循環。

相關焦點

  • python循環控制語句
    循環語句語句後面一定要跟:冒號for循環:1.for…in range()遍歷格式:for i in range(5);或者for i in range( 0,10,3 );格式中的1列印i是從0開始後列印到5結束
  • Python中的for i in range(range()函數的for循環)如何使用,詳細介紹
    range函數的for循環 1
  • Python中的for循環
    # 循環允許我們重複執行一個代碼或代碼塊 # python中的循環 # for循環 # while循環 # for循環是一種迭代循環機制,而while循環是條件循環,迭代即重複相同的邏輯操作
  • Python入門講解
    [python] view plain copy print?  print 'hello, world'  Python以縮進來區分語句塊不像Java,C/C++以花括號{}來區分語句塊.Python是以縮進來表示語句塊,同一縮進級別為同一級別的語句塊.
  • Python 2和Python 3代碼有哪些區別?
    主要的一些區別在以下幾個方面: print函數Python 2中print是語句(statement),Python 3中print則變成了函數。xrangePython 2中有 range 和 xrange 兩個方法。其區別在於,range返回一個list,在被調用的時候即返回整個序列;xrange返回一個iterator,在每次循環中生成序列的下一個數字。Python 3中不再支持 xrange 方法,Python 3中的 range 方法就相當於 Python 2中的 xrange 方法。
  • python:控制流程 - for迭代循環
    語法規則:for i in obj:循環體 注意縮進3. range的用法:for i in range(21):() 表示的是一個範圍第一種print(list(range(5))) print(list(range(1, 5))) print(list(range(1, 5, 2)))
  • Python和C/C++交互的幾種方法總結
    首先輸入 %load_ext cython ,然後執行,%開頭的語句是jupyter的魔法命令,%是行命令,%%是單元命令,具體不多說,有空給大家專門介紹一下notebook的使用。然後後面的循環就是累加0到9的意思,最後輸出45.另外,我們如果想分析代碼 的執行情況,可以輸入 %%cython --annotate 命令,這樣就可以輸出結果的同時,也輸出 詳細的代碼執行情況報告了。截圖如圖4 所示:
  • 《第4章 Python 流程控制語語句》4.3.3 循環嵌套!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》 4.3.3 循環嵌套!輸出99乘法表一:'''for i in range(1,10): # 輸出9行for j in range(1, i + 1): # 輸出與行數相等的列print(str(j) + "×" + str(i) + "=" + str(i * j) + "\t",end = '')print('')
  • 徹底理解Python中的yield
    雖然之前有接觸過python中的生成器的概念,但是只是走馬觀花,這兩天的一次交談中,別人問到了生成器,頓時語塞,死活想不起來曾經看過的東西,之後突然想到了yield,但為時已晚,只能說概念不清,所以本篇今天總結縷縷python的生成器和yield關鍵字。在介紹yield前有必要先說明下Python中的迭代器(iterator)和生成器(constructor)。
  • Python 初學者進階的九大技能
    ;使用函數(並正確談論函數);面向對象編程;尊重PEP。切記,在大多數IDE中,可以摺疊循環和if語句,從而更容易查看正在使用的部分。右側是摺疊了if/else語句的ATOM另一種辦法是將你的代碼通過 www.pythontutor.com可視化,就可以逐行查看代碼運行的方式了。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    最後,你也可以在生成 list 時用 if 語句進行篩選。下面這個例子中,我們只保留了能被 2 整除的值:這是因為 range 函數隻返回了一個類似 list 的類。由此可見,相較於直接使用 list,使用 range 能節省很多空間:
  • Python中的函數式編程教程,學會用一行代碼搞定
    next__(self):        # second magic method        if self.current > self.high:            raise StopIteration        else:            self.current += 1 return self.current - 1「魔法方法是python
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。時序分析在開始進行任何優化之前,我們首先需要找出代碼的哪些部分使整個程序變慢。
  • 騰訊大佬的 Python 編碼規範
    解釋器聲明編碼格式聲明模塊注釋或文檔字符串模塊導入常量和全局變量聲明頂級定義(函數或類定義)執行代碼編碼格式聲明通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字符,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的。我一直 UTF-8 編碼格式,喜歡使用第一種聲明方式。Windows 平臺上,編碼格式聲明必須位於 python 文件的第一行。
  • 5個助你效率提升的python小技巧
    使用交互模式使用python -i xxxx.py可以直接進入python的交互模式,可以很方便的調用xxxx.py中定義的方法和函數,特別適合調試沒有main()方法的文件,強力推薦。使用pdb進行調試很多從c++/java轉到python的同學可能對python沒有斷點功能相當失望。其實python自帶的pdb庫就可以解決這個問題。看這個例子。
  • Python 爬蟲實踐:《戰狼2》豆瓣影評分析
    目標總覽主要做了三件事:使用的python版本是3.5.一、抓取網頁數據第一步要對網頁進行訪問,python中使用的是urllib庫。在python中使用BeautifulSoup庫進行html代碼的解析。(註:如果沒有安裝此庫,則使用pip install BeautifulSoup進行安裝即可!)
  • 手把手教你用Python爬中國電影票房數據
    DataFrame:DataFrame可以簡單理解為Excel裡的表格格式。導入pandas包後,字典和列表都可以轉化為DataFrame,以上面的字典為例,轉化為DataFrame是這樣的:import pandas as pddf=pd.DataFrame.from_dict(zidian,orient='index',columns=['age'])df=df.reset_index().rename(columns
  • 【Python技術進階-9】使用Python讀寫文件(上)
    使用open函數打開文件後,返回一個文件對象,這個文件對象是可迭代的對象。因此可以使用for循環的方式讀取每一行的文本內容。if語句的判斷,有點繁瑣。為此,Python提供了優雅的with open as的方式打開文件,對文件相關的操作全部放在With語句的代碼塊中。Python會自動幫我們關閉文件對象,即使With語句的代碼塊中發生了異常,也會自動關閉打開的文件對象。
  • python matplotlib 繪製雙Y軸曲線圖
    微信公眾號:數據皮皮俠如果你覺得該公眾號對你有幫助,歡迎關注、推廣和宣傳內容目錄:python matplotlib 繪製雙Y軸曲線圖雙X軸的可以理解為共享y軸1.ax1=ax.twiny()2.ax1=plt.twiny()