Python入门任务:移除字符串小数部分并转置矩阵写入文件
解决矩阵转置输出中的.0后缀问题
问题背景
正在学习Python入门,需要完成以下任务:从input.txt读取两行数字字符串,转为矩阵后转置,再写入output.txt,且不能使用numpy或pandas库。当前代码输出的数字带有.0后缀,需要移除。
输入输出示例
- 原输入(
input.txt):
1 2 3 4 5 6 7 8 9 10
- 期望输出(
output.txt):
1 6 2 7 3 8 4 9 5 10
- 当前代码输出:
1.0 6.0 2.0 7.0 3.0 8.0 4.0 9.0 5.0 10.0
原代码
with open('input.txt') as f: Matrix = [list(map(float, row.split())) for row in f.readlines()] TrMatrix=[[Matrix[j][i] for j in range(len(Matrix))] for i in range(len(Matrix[0]))] file=open('output.txt','w') for i in range(len(TrMatrix)): print(*TrMatrix[i],file=file)
解决方案
问题根源是你用map(float)把输入的整数转成了浮点数,输出时自然会带上.0。根据输入的不同情况,有两种处理方式:
方法1:输入全为整数时直接转int
既然你的输入都是整数,读取时直接转成int而非float即可彻底解决问题,同时简化代码:
with open('input.txt') as f: # 读取每行并转成整数列表,跳过空行 matrix = [list(map(int, row.split())) for row in f if row.strip()] # 用zip(*matrix)快速实现转置,转成列表方便后续操作 transposed = list(zip(*matrix)) # 用with语句安全写入文件 with open('output.txt', 'w') as file: for row in transposed: print(' '.join(map(str, row)), file=file)
方法2:输入混合整数和浮点数时动态处理
如果输入可能包含真正的浮点数(比如1.5),需要保留小数部分,同时去掉整数型浮点数的.0,可以用判断函数格式化每个数字:
def format_number(num): # 如果是整数型浮点数,转成int;否则保留原数 return int(num) if num.is_integer() else num with open('input.txt') as f: matrix = [list(map(float, row.split())) for row in f if row.strip()] transposed = [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] with open('output.txt', 'w') as file: for row in transposed: # 先格式化每个数字,再转成字符串拼接 formatted_row = ' '.join(map(str, map(format_number, row))) print(formatted_row, file=file)
额外优化点
- 使用
zip(*matrix)替代手动嵌套循环实现转置,代码更简洁; - 用
with语句处理output.txt,避免忘记关闭文件的问题; - 加入
if row.strip()过滤可能存在的空行,增强代码鲁棒性。
内容的提问来源于stack exchange,提问作者sasaikudasai
相关产品推荐
相关产品推荐

