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

Python按组统计坐标移动转换次数的技术实现问询

一步步解决按组统计坐标转换次数的问题

很高兴看到你从毫无头绪到写出能运行的代码,咱们来把整个过程理清楚,也给你一些优化思路~

先明确核心需求

你需要处理每行格式为a,b,c的文件:

  • a无意义可以忽略
  • b是坐标(范围1-117)
  • c是组编号
    最终要按组统计所有可能的坐标转换次数(从1→1到117→117,没出现的转换次数为0)。

比如你给出的示例输入:

23,20,789
25,7,789
29,7,789
32,20,789
0,2,870
3,40,870

组789的转换统计是:20→7(1次)、7→7(1次)、7→20(1次),其余全为0;组870则是2→40(1次),其余为0。

第一次代码的问题根源

你最初的代码出现重复统计输出的问题,是因为外层循环遍历了每一对连续的坐标,然后内层循环又去匹配所有相同的坐标对,导致同一个x→y转换会被多次输出(只要序列里出现多次这个转换,就会重复打印一次计数)。比如序列里有多个20→20,代码就会多次输出from 20 to 20 , result= 28242。

你的修改版为什么能解决问题

你修改后的思路完全正确!直接遍历所有可能的坐标组合(1到117的from和to),每个组合只统计一次、输出一次,从根源上避免了重复输出的问题。

不过可以给你优化一下代码的可读性和效率,比如如果你的原始文件是每行一个数据(不是同一组在一行),可以先按组把坐标序列提取出来,再统计:

优化后的完整代码

from collections import defaultdict

# 第一步:按组分组,提取每个组的坐标序列
group_coords = defaultdict(list)
with open("your_input_file.txt", "r") as input_file:
    for line in input_file:
        line = line.strip()
        if not line:  # 跳过空行
            continue
        # 拆分每行数据,忽略a,提取b(坐标)和c(组编号)
        _, coord_str, group_str = line.split(",")
        coord = int(coord_str)
        group_id = int(group_str)
        group_coords[group_id].append(coord)

# 第二步:对每个组统计转换次数并写入结果
with open("count_results.txt", "w") as output_file:
    for group_id, coords in group_coords.items():
        output_file.write(f"=== 组 {group_id} 转换统计 ===\n")
        # 初始化117x117的计数矩阵,默认值0(坐标1-117对应索引1-117)
        transition_counts = [[0] * 118 for _ in range(118)]
        
        # 遍历当前组的连续坐标对,统计次数
        for i in range(len(coords) - 1):
            from_coord = coords[i]
            to_coord = coords[i+1]
            transition_counts[from_coord][to_coord] += 1
        
        # 输出所有可能的转换对
        for from_coord in range(1, 118):
            for to_coord in range(1, 118):
                output_file.write(f"from {from_coord} to {to_coord} , result= {transition_counts[from_coord][to_coord]}\n")
        output_file.write("\n")

这个优化版的优势:

  • 自动处理所有组,不需要手动单组读取
  • 用二维列表统计次数,比三层循环效率更高
  • 代码结构更清晰,后续维护起来更方便

如果你还是习惯用你修改后的单组处理方式,也完全没问题,核心逻辑是对的~

内容的提问来源于stack exchange,提问作者Max.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:10