如何修改Python代码 将返回值从set/集合列表改为list/列表列表
有多种可行实现方案,分两种常见场景供你参考:
- 方案1:不改动原有类逻辑,调用时做类型转换
如果不需要修改原有SetSuite类的核心功能(避免影响其他依赖这个类的代码),直接在获取返回结果后做一层遍历转换即可:
# 初始化示例 suite = SetSuite([[1,2,3], [2,3,4], [3,4,5]]) # 把集合列表转成列表列表 list_of_list = [list(s) for s in suite.get_sets()] # 并集转列表 union_list = list(suite.union_all()) # 交集转列表 intersection_list = list(suite.intersection_all())
如果需要保证列表元素顺序固定,可以用sorted包裹转换逻辑:[sorted(s) for s in suite.get_sets()]
- 方案2:修改类方法,原生返回列表类型
如果需要类直接输出列表格式,可以对原有类的返回方法做调整,修改后的代码如下:
class SetSuite: def __init__(self, list_of_lists): self.__data = [] for a_list in list_of_lists: self.add_set(a_list) def add_set(self, a_list): self.__data.append(set(a_list)) # 修改后返回列表列表 def get_sets(self): return [list(s) for s in self.__data] # 需要固定顺序的话改成 return [sorted(s) for s in self.__data] # 修改后返回并集列表 def union_all(self): union_set = set() for a_set in self.__data: union_set = union_set.union(a_set) return list(union_set) # 需要固定顺序的话改成 return sorted(union_set) # 修改后返回交集列表 def intersection_all(self): if len(self.__data) == 0: return [] intersection_set = set(self.__data[0]) for a_set in self.__data[1:]: intersection_set = intersection_set.intersection(a_set) return list(intersection_set) # 需要固定顺序的话改成 return sorted(intersection_set)
注意:集合本身是无序不重复的结构,转换为列表时默认元素顺序不固定,如果业务对元素顺序有要求,建议用
sorted()函数对转换后的列表做排序处理,保证返回结果的一致性。
内容的提问来源于stack exchange,提问作者krischenyt
相关产品推荐
相关产品推荐

