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)

 

posted @ 2021-12-22 11:31  Adamanter  阅读(104)  评论(0)    收藏  举报