python: 集合intersection 求交集
#!/usr/bin/env python # -*- encoding: utf-8 -*- """ """ from loguru import logger l = [[1, 2, 3, 4, 12], [2, 4, 5, 6, 9, 78], [2, 3, 4, 5, 8, 12, 78]] # 第一种方法 fl_set = set([]) for idx, fl_values in enumerate(l): if not fl_set: fl_set = set(fl_values) else: fl_set &= set(fl_values) logger.debug('{}'.format(fl_set)) # 第二种方法 tmp_l = set(l[0]) end = len(l) - 1 for i in range(1, end, 1): tmp_l = tmp_l.intersection(l[i]) if i == end: break logger.debug('{}'.format(tmp_l)) # 第二种方法的原始方法 tmp_l = set(l[0]) end = len(l) - 1 start = 1 for item in l: tmp_l = tmp_l.intersection(l[start]) start += 1 if start == end: break logger.debug('{}'.format(tmp_l)) # 例子 知道N个列表求交集 list1 = [1, 2, 3, 4, 12] list2 = [2, 4, 5, 6, 9, 78] list3 = [2, 3, 4, 5, 8, 12, 78] # list(set(list1).intersection(set(list2),set(list3),....))#如果有很多个,可以继续添加 res = set(list1).intersection(list2, list3) logger.debug('{}'.format(res)) # fids = '' # fid_arr = fids.split(',') # print(fid_arr) # fid_arr = list(filter(lambda x: len(x) > 0, fid_arr)) # print(fid_arr) # b_arr = [ # {'Name': ''}, # {'Name': 'ST'}, # {'Name': '*ST'}, # {'Name': '贵州茅台'}, # ] # # b_arr = list(filter(lambda x: not x.get("Name", '').startswith(('ST', '*ST')), b_arr)) # print(b_arr)