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, ...) 将元组转回为列表,得到去重后的结果。