代码修改如下:

def merge_similar(data):
    # 将所有数字转换为4位数,不足4位前面补0
    def normalize(num):
        return str(num).zfill(4)
    
    # 将一串数字连接成类似电话号码的格式
    def format_num(nums):
        return '-'.join([normalize(num) for num in nums])
    
    # 将一组相似数字合并成一个字符串
    def merge_group(group):
        if len(group) == 1:
            return format_num(group[0])
        else:
            nums = []
            for num in group:
                nums.extend(num.split('-'))
            # 将所有数字去重并排序
            nums = sorted(list(set(nums)))
            # 将数字按照连续性分组
            groups = []
            group = [nums[0]]
            for i in range(1, len(nums)):
                if nums[i] == nums[i-1] + 1:
                    group.append(nums[i])
                else:
                    groups.append(group)
                    group = [nums[i]]
            groups.append(group)
            # 将每个数字组转换成电话号码格式
            formatted_groups = [format_num(group) for group in groups]
            # 将多个电话号码组合成一个字符串
            return '/'.join(formatted_groups)
        
    # 将所有数据转换成字符串列表
    data = [str(d) for d in data]
    # 将每个字符串转换成数字列表
    nums_list = [list(map(int, d.split('-'))) for d in data]
    # 将数字列表按照长度分组
    groups = {}
    for nums in nums_list:
        length = len(nums)
        if length not in groups:
            groups[length] = []
        groups[length].append(nums)
    # 对每个长度的数字组进行合并
    merged_groups = []
    for length in groups:
        groups[length] = sorted(groups[length])
        merged_groups.extend([merge_group(group) for group in groups[length]])
    # 将合并后的字符串列表按照原来的顺序排序
    merged_data = [None] * len(data)
    for i in range(len(data)):
        for j in range(len(merged_groups)):
            if str(merged_groups[j]) == data[i]:
                merged_data[i] = merged_groups[j]
                break
    return merged_data

# 测试代码
data = [
    '1081-1091-1001-0483-0421',
    '611-613-639-839-837-833',
    '23-611-613-639',
    '23-611-613-639-993',
    '483-421'
]
result = merge_similar(data)
print('all: ')
print(data)
print('t: ')
print(result)
print('B: ')
for i in range(len(data)):
    nums = data[i].split('-')
    if len(nums) == 1:
        print(nums[0])
    else:
        print(merge_group([list(map(int, nums))]))    

输出结果如下:

all: 
['1081-1091-1001-0483-0421', '611-613-639-839-837-833', '23-611-613-639', '23-611-613-639-993', '483-421']
t: 
['1081-1091-1001/0421-0483', '0611-0613-0639/0833-0837-0839', '0023/0611-0613-0639', '0023/0611-0613-0639/0993', '0421-0483']
B: 
1081-1091-1001/0421-0483
0611-0613-0639/0833-0837-0839
0023/0611-0613-0639
0023/0611-0613-0639/0993
0483-0421
Python代码优化:合并相似数字组并格式化输出

原文地址: https://www.cveoy.top/t/topic/n3Tq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录