Python 支持 for 循环, 它的语法与其他语言 (如 JavaScript 或 Java) 稍有不同. 下面的代码块演示如何在 Python 中使用 for 循环来遍历列表中的元素:
上述的代码段是将三个字母分行打印的. 你可以通过在 print 语句的后面添加逗号 "," 将输出限制在同一行显示(如果指定打印的字符很多, 则会 "换行"), 代码如下所示:
当你希望通过一行而不是多行显示文本中的内容时, 可以使用上述形式的代码. Python 还提供了内置函数 reversed(), 它可以反转循环的方向, 例如:
注意, 只有当对象的大小是确定的, 或者对象实现了_reversed_()方法的时候反向遍历的功能才有效.
01 使用 tryexcept 的 for 循环
清单 1 的 StringToNums.py 说明了如何对一组从字符串转换而来的整数求和.
清单 1 StringToNums.py
- 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 打印出数值单词的和, 并在后面显示非数值单词. 它的输出如下所示:
02 指数运算
清单 2 的 Nth_exponet.py 说明了如何计算一组整数的幂.
清单 2 Nth_exponet.py
- 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 的值. 它的输出如下所示:
03 嵌套的循环
清单 3 的 Triangular1.py 说明了如何打印一行连续整数(从 1 开始), 其中每一行的长度都比前一行大 1.
清单 3 Triangular1.py
- 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 的值. 它的输出如下所示:
04 在 for 循环中使用 split()函数
Python 支持各种便捷的字符串操作相关函数, 包括 split()函数和 join()函数. 在需要将一行文本分词化 (即 "分割") 为单词, 然后使用 for 循环遍历这些单词时, split()函数非常有用.
join()函数与 split()函数相反, 它将两个或多个单词 "连接" 为一行. 通过使用 split()函数, 你可以轻松地删除句子中多余的空格, 然后调用 join()函数, 使文本行中每个单词之间只有一个空格.
1. 使用 split()函数做单词比较
清单 4 的 Compare2.py 说明了如何通过 split()函数将文本字符串中的每个单词与另一个单词进行比较.
清单 4 Compare2.py
- 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 的输出如下所示:
2. 使用 split()函数打印指定格式的文本
清单 5 的 FixedColumnCount1.py 说明了如何打印一组设定固定宽度的字符串.
清单 5 FixedColumnCount1.py
- 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 的输出如下所示:
3. 使用 split()函数打印固定宽度的文本
清单 6 的 FixedColumnWidth1.py 说明了如何打印固定宽度的文本.
清单 6 FixedColumnWidth1.py
- 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 的输出如下所示:
4. 使用 split()函数比较文本字符串
清单 7 的 CompareStrings1.py 说明了如何判断一个文本字符串中的单词是否出现在另一个文本字符串中.
清单 7 CompareStrings1.py
- 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 的输出如下所示:
05 用基础的 for 循环显示字符串中的字符
清单 8 的 StringChars1.py 说明了如何打印一个文本字符串中的字符.
清单 8 StringChars1.py
- text = 'abcdef'
- for ch in text:
- print('char:',ch,'ord value:',ord(ch))
清单 8 的代码简单直接地通过一个 for 循环遍历字符串 text 并打印它的每个字符以及字符的 ord 值(ASCII 码). 清单 8 的输出如下所示:
06 join()函数
另一个去掉多余空格的方法是使用 join()函数, 代码示例如下所示:
split()函数将一个文本字符串 "分割" 为一系列的单词, 同时去掉多余的空格. 接下来 join()函数使用一个空格作为分隔符将字符串 text1 中的单词连接在一起. 上述代码的最后部分使用字符串 XYZ 替换空格作为分隔符, 执行相同的连接操作. 上述代码的输出如下:
关于作者: 奥斯瓦尔德. 坎佩萨托(Oswald Campesato), 专门研究深度学习, Java,Android 和 TensorFlow. 他是 25 本书的作者 / 合著者.
本文摘编自《机器学习入门: Python 语言实现》, 经出版方授权发布.(ISBN:9787111695240)
来源: http://developer.51cto.com/art/202201/699270.htm