You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:10:33