2022年 11月 5日

Python进行列表数组过滤数据

文章目录

  • 前言
  • 代码如下:
  • 总结

前言

想写个过滤数据的操作,但是不想用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] 但是这是已知长度的手写,而不适合复用,循环的话其实和上面方法差不多。如果有什么更好的办法,还请各位大佬多多指教。