文章目录
- 前言
- 代码如下:
- 总结
前言
想写个过滤数据的操作,但是不想用for循环一个个元素过滤,尤其是在列表个数比较多的情况下,之后查看到一篇博文,根据里面的转成set集合方法,加以进行修改实现,感谢这位博主的博文:
博文地址:python- 两个列表获取内容相同的元素
代码如下:
其实还是for循环,只是比较元素成了里面的一个个列表,而不是需要再循环列表获取里面的数值来比对,通过循环比对列表元素,进而一个个比对过滤,到最后过滤出共同的结果:1。
base_list = [[1, 2, 3, 4], [3, 4, 5, 6, 1], [1, 7, 8, 9]] # 基础数据
set_list = [set(v) for v in base_list] # 转成set集合元素
res_set = set() # 比对结果,循环用于赋值
for i in range(len(set_list)):
if i == 0:
tmp_compare = (set_list[i] & set_list[i + 1])
res_set = tmp_compare
elif i + 2 <= len(set_list):
tmp_compare = (res_set & set_list[i + 1])
res_set = tmp_compare
else:
break
print(set_list)
print(res_set)
#[{1, 2, 3, 4}, {1, 3, 4, 5, 6}, {8, 1, 9, 7}] 输出结果
#{1} 输出结果
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
总结
一开始想过一次性过滤,形同:res_set = set_list[0]&set_list[1]&set_list[2] 但是这是已知长度的手写,而不适合复用,循环的话其实和上面方法差不多。如果有什么更好的办法,还请各位大佬多多指教。