CÃlimos 2023-07-04 20:23 采纳率: 65.5%
浏览 16
已结题

用Python实现:寻找一个二维数组里所有相差10以内的数,然后这些数统一为其中的最大值


[[170, 41, 302, 91], [170, 90, 304, 724], [170, 730, 302, 755], [170, 753, 303, 1243], [302, 41, 564, 352], [302, 355, 564, 509], [302, 509, 564, 579], [302, 578, 564, 697], [302, 697, 564, 819], [302, 818, 569, 995], [302, 996, 564, 1060], [302, 1063, 564, 1242], [564, 41, 612, 352], [564, 355, 612, 1247], [612, 41, 730, 91], [612, 90, 730, 731], [612, 730, 730, 756], [612, 753, 730, 1243]]

这样一个二维数组,其中两两相差10以内的数有好几组,比如724,730 302,303,304 1243,1247 569和564等等
如何将这些组里的数统一都变为其中最大的数,如上述都变成730,304,1247,569……

  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-07-04 20:39
    关注

    这样么

    img

    用Python实现的代码来寻找二维数组中相差10以内的数,并将它们统一为最大值

    def find_and_replace(arr):
        # 创建一个字典用于存储相差10以内的数的组
        num_groups = {}
    
        # 遍历二维数组
        for row in arr:
            for num in row:
                # 在字典中查找与当前数相差10以内的数的组
                for group in num_groups.keys():
                    if any(abs(num - n) <= 10 for n in group):
                        # 如果找到相差10以内的数的组,将当前数添加到该组中
                        num_groups[group].add(num)
                        break
                else:
                    # 如果没有找到相差10以内的数的组,则创建一个新组并将当前数添加到其中
                    num_groups[frozenset([num])] = {num}
    
        # 将每个组中的数替换为组内的最大值
        for group in num_groups.values():
            max_num = max(group)
            for num in group:
                if num != max_num:
                    # 将数替换为组内的最大值
                    arr = [[max_num if n == num else n for n in row] for row in arr]
    
        return arr
    
    
    # 测试代码
    array = [[170, 41, 302, 91], [170, 90, 304, 724], [170, 730, 302, 755], [170, 753, 303, 1243],
             [302, 41, 564, 352], [302, 355, 564, 509], [302, 509, 564, 579], [302, 578, 564, 697],
             [302, 697, 564, 819], [302, 818, 569, 995], [302, 996, 564, 1060], [302, 1063, 564, 1242],
             [564, 41, 612, 352], [564, 355, 612, 1247], [612, 41, 730, 91], [612, 90, 730, 731],
             [612, 730, 730, 756], [612, 753, 730, 1243]]
    
    result = find_and_replace(array)
    print(result)
    

    可以看到,二维数组中的相差10以内的数被统一替换为了每个组中的最大值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月5日
  • 已采纳回答 7月4日
  • 创建了问题 7月4日

悬赏问题

  • ¥15 关于stm32hal库驱动ft6336触摸屏遇到的问题
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22