【Python】案例:多维列表拆分和去重

1.问题

原始数据:[['H6', 'S4'], ['H6', 'C4'], ['H6', 'S4'], ['H6', 'S6'], ['H6', 'CK'], ['H6', 'HK'], [('C4', 'S4'), ('S4', 'S4')], ['S6', 'H6'], ['CK', 'HK']]

要求:

1.将列表中函有两个元素的列表和元组拆分出来,形成一个新的二维列表

2.将列表中的元组元素改为列表元素

3.去除相同的列表项

2.代码

# 初始化结果列表
result_list = []
# 示例嵌套数组
nested_array = [['H6', 'S4'], ['H6', 'C4'], ['H6', 'S4'], ['H6', 'S6'], ['H6', 'CK'], ['H6', 'HK'],
                [('C4', 'S4'), ('S4', 'S4')], ['S6', 'H6'], ['CK', 'HK'], [['H6', 'S4']]]

def split_list(array):
    for item in array:
        if isinstance(item, str):
            return "arr"
        else:
            end = split_list(item)
            if end == "arr":
                result_list.append(item)

def chang_tuple():
    for item in range(0, len(result_list)):
        if isinstance(result_list[item], tuple):
            new_list = [result_list[item][0], result_list[item][1]]
            result_list[item] = new_list

def main(result_list):
    # 调用递归函数,拆分列表
    split_list(nested_array)
    # 将元组转换为列表
    chang_tuple()
    # 列表去重
    result_list = list(map(list, set(map(tuple, result_list))))
    # 打印结果
    print(result_list)

main(result_list)  # 调用函数

3.分析

1.split_list(array)

使用递归的方法逐层遍历每层列表中的项目,当检测到当前列表或元组的下一层是字符串时(end == "arr")将该列表项添加到结果列表中等待下一步处理。

2.chang_tuple()

遍历拆分后列表中的每一项,当检测到某一项是元组时提取元组中的数据形成新的列表,然后覆盖原有的元组

3.result_list = list(map(list, set(map(tuple, result_list))))

map(tuple, original_list) 将每个子列表转换为元组,然后 set 将元组集合化,去除重复项,最后 map(list, ...) 将元组转回为列表,得到去重后的结果。

你可能感兴趣的:(python,开发语言)