如何批量对多个列表应用set()函数?附DataFrame转字典去重方案
如何批量将多个列表转换为集合去重?
我尝试将set()函数应用于多个列表对象,示例列表如下:
test_lst1 = ['a','b','c','d','e','b','e'] test_lst2 = ['z','x','y','z']
我想实现类似如下逻辑的操作(伪代码):
for x in range(2): test_lst{x} = set(test_lst{x})
请问该如何实现?
补充说明
我已决定将DataFrame转换为字典,通过循环为每个列赋值并去除重复项,代码如下:
test_dict = {} for col in test_df : test_dict[col] = test_df[col].unique()
针对多列表批量转集合的解决方案
Python不建议直接通过拼接变量名的方式动态操作变量,推荐用容器(列表/字典)统一管理,更规范易维护:
方法1:用列表统一处理
把所有目标列表存入一个列表,通过列表推导式批量转换:
test_lst1 = ['a','b','c','d','e','b','e'] test_lst2 = ['z','x','y','z'] # 存入容器列表 target_lists = [test_lst1, test_lst2] # 批量转换为集合 processed_sets = [set(lst) for lst in target_lists] # 如需回写原变量 test_lst1, test_lst2 = processed_sets
方法2:用字典映射变量名
如果需要保留原变量名的关联,用字典存储更清晰:
test_lst1 = ['a','b','c','d','e','b','e'] test_lst2 = ['z','x','y','z'] # 构建变量名与列表的映射 lst_mapping = { 'test_lst1': test_lst1, 'test_lst2': test_lst2 } # 循环转换为集合 for name in lst_mapping: lst_mapping[name] = set(lst_mapping[name]) # 访问转换后的集合:lst_mapping['test_lst1']
针对DataFrame转字典去重的优化
你的现有思路可行,还可以用字典推导式简化代码,更简洁高效:
test_dict = {col: test_df[col].unique() for col in test_df}
如果需要集合而非unique()返回的numpy数组,可修改为:
test_dict = {col: set(test_df[col].dropna()) for col in test_df}
dropna()用于排除空值,可根据需求决定是否添加。
内容的提问来源于stack exchange,提问作者mangarapaul
相关产品推荐
相关产品推荐

