python 读入多行数据的实例
在Python编程中,读取多行数据是常见的任务,特别是在处理用户输入或读取文本文件时。本实例展示了如何使用`raw_input()`函数读取多行数据并将其转换为二维列表,最后用NumPy库创建一个填充特定值的二维矩阵。 一、`raw_input()`函数的使用 `raw_input()`函数在Python 2.x版本中用于接收用户从控制台输入的数据,它会将输入的字符串原样返回,不进行任何转换。在Python 3.x中,这个函数已被`input()`函数取代,但在这个实例中,我们仍然使用`raw_input()`,假设是在Python 2.x环境下操作。 ```python inputLine = raw_input() ``` 这行代码会等待用户输入一行文本,直到用户按下回车键。输入的文本会被存储到`inputLine`变量中。 二、读取多行数据 通过一个循环结构,我们可以不断读取用户输入的每一行,直到用户不输入任何内容并直接回车。当`raw_input()`返回一个空字符串时,表示用户已经结束输入。 ```python while inputLine != '': # 处理每一行输入 ... inputLine = raw_input() ``` 在循环内部,`inputLine`的值会被更新,继续读取下一行。如果用户输入的是一个包含数字的字符串,可以通过`split(' ')`方法将其拆分为一个列表,然后通过列表推导式将这些字符串转换为整数。 ```python listLine = inputLine.split(' ') listLine = [int(e) for e in listLine] ``` 这样,每一行的数据就被转换为一个整数列表,并添加到结果列表`res`中。 三、处理不等长的二维列表 在实例的第二部分,我们处理了一个不等长的二维列表`inList`,它的每一项可以看作是一行数据。为了将它们转换为等宽的二维矩阵,我们需要找到最长子序列的长度,并为其他较短的子序列填充特定值(这里为0)。 ```python maxCols = 0 for i in range(len(inList)): lenI = len(inList[i]) if lenI > maxCols: maxCols = lenI # 填充 for i in range(len(inList)): num = len(inList[i]) while (num <= maxCols): inList[i].append(val) num += 1 ``` 这段代码首先计算出所有子序列的最大长度`maxCols`,然后遍历每个子序列,不足`maxCols`长度的部分追加`val`(0),确保所有子序列具有相同的长度。 四、使用NumPy创建二维矩阵 我们可以利用NumPy库将处理后的二维列表转换为一个NumPy数组,指定数据类型为`np.int64`。 ```python import numpy as np matArray = np.array(inList, dtype=np.int64) ``` 输出`matArray`,我们就得到了一个填充后的二维矩阵。 总结: 这个实例详细介绍了如何在Python中使用`raw_input()`函数读取多行数据,将数据转化为二维列表,处理不等长的子序列,以及用NumPy创建二维矩阵。这些技巧在处理大量数据时非常实用,例如在数据分析、文件读写等场景中。