Python2编写矩阵元素平均值函数average(m)出现TypeError报错求解
问题解决
错误原因
你的代码存在两个核心问题:
- 完全没有处理传入的二维矩阵参数
m,你定义的lst是空列表,没有存入任何矩阵里的整数元素。 - 你遇到的
TypeError: unsupported operand type(s) for /: 'list' and 'int'是因为你实际运行的代码中误将列表类型的值直接作为除法左操作数,和整数进行运算导致的。
正确实现(Python2环境兼容)
写法1:遍历计数(易理解)
def average(m): sum_total = 0 count = 0 # 遍历矩阵每一行 for row in m: # 遍历行内每个元素 for num in row: sum_total += num count += 1 # 转float避免Python2整数除法截断结果 return float(sum_total) / count
写法2:列表推导式展开矩阵(更简洁)
def average(m): # 展开二维矩阵为一维整数列表 all_nums = [num for row in m for num in row] return sum(all_nums) * 1.0 / len(all_nums)
测试代码调整提示
学校给出的测试代码中import random的位置错误,需要放到test()函数定义之前,否则运行会报NameError,调整后完整测试代码如下:
import random def test(): l = [] for i in range(random.randint(3,5)): ll = [] for j in range(random.randint(3,4)): ll.append(random.randint(1,10)) l.append(ll) print ("Matrix:",l) print ("Average of items:", average(l)) test() print ("") test()
内容的提问来源于stack exchange,提问作者bignoobincoding
相关产品推荐
相关产品推荐

