Python 支援for循環,它的語法與其他語言(如JavaScript 或Java)稍有不同。下面的程式碼區塊示範如何在Python中使用for迴圈來遍歷清單中的元素:
#上述的程式碼片段是將三個字母分行列印的。你可以透過在print語句的後面加上逗號「,」將輸出限制在同一行顯示(如果指定列印的字元很多,則會「換行」),程式碼如下所示:
當你希望透過一行而不是多行顯示文字中的內容時,可以使用上述形式的程式碼。 Python也提供了內建函數reversed(),它可以反轉循環的方向,例如:
#注意,只有當物件的大小是確定的,或是物件實作了_reversed_()方法的時候反向遍歷的功能才有效。
清單1 的StringToNums.py說明如何對一組從字串轉換而來的整數求和。
<ol><pre class="brush:sql;toolbar:false;">line = '1 2 3 4 10e abc' sum = 0 invalidStr = "" print('String of numbers:',line) for str in line.split(" "): try: sum = sum + eval(str) except: invalidStr = invalidStr + str + ' ' print('sum:', sum) if(invalidStr != ""): print('Invalid strings:',invalidStr) else: print('All substrings are valid numbers')
清單1先初始化變數line、sum和invalidStr,然後顯示line的內容。接下來將line中的內容分割為單字,然後透過try程式碼區塊逐一將單字的數值累積到變數sum中。如果發生異常,則將目前str的內容追加到變數invalidStr。
當迴圈執行結束,清單1 會列印出數值單字的和,後面顯示非數值單字。它的輸出如下所示:
清單2 的Nth_exponet.py說明如何計算一組整數的冪。
<ol ><pre class="brush:sql;toolbar:false;">maxPower = 4 maxCount = 4 def pwr(num): prod = 1 for n in range(1,maxPower+1): prod = prod*num print(num,'to the power',n, 'equals',prod) print('-----------') for num in range(1,maxCount+1): pwr(num)
#清單2 中有一個pwr()函數,其參數為一個數值。此函數中的迴圈可列印出參數的1 到n次方,n的值範圍在1到maxCount 1之間。
程式碼的第二部分透過一個for迴圈呼叫pwr()函數從1到maxCount 1的值。它的輸出如下所示:
清單3 的Triangular1.py說明如何列印一行連續整數(從1開始),其中每一行的長度都比前一行大1。
<ol ><pre class="brush:sql;toolbar:false;">max = 8 for x in range(1,max+1): for y in range(1,x+1): print(y,'', end='') print()
#清單3先初始化max變數為8,之後再透過變數x從1到max 1執行循環。內層循環有一個值為從1到x 1的循環變數y,並印出y的值。它的輸出如下所示:
Python支援各種便捷的字串運算相關函數,包括split()函數和join()函數。在需要將一行文字分詞化(即「分割」)為單字,然後使用for迴圈遍歷這些單字時,split()函數非常有用。
join()函數與split()函數相反,它將兩個或多個單字「連接」為一行。透過使用split()函數,你可以輕鬆地刪除句子中多餘的空格,然後呼叫join()函數,使文字行中每個單字之間只有一個空格。
#清單4 的Compare2.py說明如何透過split()函式將文字字串中的每個單字與另一個單字進行比較。
<ol ><pre class="brush:sql;toolbar:false;">x = 'This is a string that contains abc and Abc' y = 'abc' identical = 0 casematch = 0 for w in x.split(): if(w == y): identical = identical + 1 elif (w.lower() == y.lower()): casematch = casematch + 1 if(identical > 0): print('found identical matches:', identical) if(casematch > 0): print('found case matches:', casematch) if(casematch == 0 and identical == 0): print('no matches found')
#清單4 透過split()函數對字串x中的每個單字與單字abc進行比較。如果單字精確匹配,就將identical變數加1;否則就嘗試不區分大小寫進行比較,若匹配就將casematch變數加1。
清單4 的輸出如下:
清单5 的FixedColumnCount1.py 说明了如何打印一组设定固定宽度的字符串。
<ol ><pre class="brush:sql;toolbar:false;">import string wordCount = 0 str1 = 'this is a string with a set of words in it' print('Left-justified strings:') print('-----------------------') for w in str1.split(): print('%-10s' % w) wordCount = wordCount + 1 if(wordCount % 2 == 0): print("") print("n") print('Right-justified strings:') print('------------------------') wordCount = 0 for w in str1.split(): print('%10s' % w) wordCount = wordCount + 1 if(wordCount % 2 == 0): print()
清单5 首先初始化变量wordCount和str1,然后执行两个for循环。第一个for循环对str1的每个单词进行左对齐打印,第二个for循环对str1的每个单词进行右对齐打印。在每个循环中当wordCount是偶数的时候就输出一次换行,这样每打印两个连续的单词之后就换行。清单5的输出如下所示:
清单6 的FixedColumnWidth1.py说明了如何打印固定宽度的文本。
<ol ><pre class="brush:sql;toolbar:false;">import string left = 0 right = 0 columnWidth = 8 str1 = 'this is a string with a set of words in it and it will be split into a fixed column width' strLen = len(str1) print('Left-justified column:') print('----------------------') rowCount = int(strLen/columnWidth) for i in range(0,rowCount): left = i*columnWidth right = (i+1)*columnWidth-1 word = str1[left:right] print("%-10s" % word) # check for a 'partial row' if(rowCount*columnWidth < strLen): left = rowCount*columnWidth-1; right = strLen word = str1[left:right] print("%-10s" % word)
清单6初始化整型变量columnWidth和字符串类型变量str1。变量strLen是str1的长度,变量rowCount是strLen除以columnWidth的值。之后通过循环打印rowCount行,每行包含columnWidth个字符。代码的最后部分输出所有“剩余”的字符。清单6的输出如下所示:
清单7 的CompareStrings1.py说明了如何判断一个文本字符串中的单词是否出现在另一个文本字符串中。
<ol ><pre class="brush:sql;toolbar:false;">text1 = 'a b c d' text2 = 'a b c e d' if(text2.find(text1) >= 0): print('text1 is a substring of text2') else: print('text1 is not a substring of text2') subStr = True for w in text1.split(): if(text2.find(w) == -1): subStr = False break if(subStr == True): print('Every word in text1 is a word in text2') else: print('Not every word in text1 is a word in text2')
清单7 首先初始化两个字符串变量text1和text2,然后通过条件逻辑判断字符串text2是否包含了text1(并输出相应打印信息)。
清单7的后半部分通过一个循环遍历字符串text1中的每个单词,并判断其是否出现在text2中。如果发现有匹配失败的情况,就设置变量subStr为False,并通过break语句跳出循环,提前终止for循环的执行。最后根据变量subStr的值打印对应的信息。清单7的输出如下所示:
清单8 的StringChars1.py说明了如何打印一个文本字符串中的字符。
<ol ><pre class="brush:sql;toolbar:false;">text = 'abcdef' for ch in text: print('char:',ch,'ord value:',ord(ch)) print
清单8 的代码简单直接地通过一个for循环遍历字符串text并打印它的每个字符以及字符的ord值(ASCII 码)。清单8 的输出如下所示:
另一个去掉多余空格的方法是使用join()函数,代码示例如下所示:
split()函数将一个文本字符串“分割”为一系列的单词,同时去掉多余的空格。接下来join()函数使用一个空格作为分隔符将字符串text1中的单词连接在一起。上述代码的最后部分使用字符串XYZ替换空格作为分隔符,执行相同的连接操作。上述代码的输出如下:
关于作者:奥斯瓦尔德·坎佩萨托(OswaldCampesato),专门研究深度学习、Java、Android和TensorFlow。他是25本书的作者/合著者。
本文摘编自《机器学习入门:Python语言实现》,经出版方授权发布。(ISBN:9787111695240)
以上是6個實例,8段程式碼,詳解 Python 中的 For 循環的詳細內容。更多資訊請關注PHP中文網其他相關文章!