假设现在有一个list,[0,1,2,3,4,5,6],现在需要过滤出偶数值
list的过滤可以分为两种情况:
1.仅知道筛选条件
2.已知筛选结果
根据函数过滤
这个当然首选filter
In[10]: list(filter(lambda x:x%2==0,[0,1,2,3,4,5,6]))
Out[10]: [0, 2, 4, 6]
当然列表生成式也是可以的,但是我感觉写起来有些麻烦
In[13]: [i for i in [0,1,2,3,4,5,6] if i%2==0]
Out[13]: [0, 2, 4, 6]
根据布尔值过滤
[0,1,2,3,4,5,6]的对应的偶数布尔list为[True, False,True, False,True, False,True]
那么可以通过下面的方式处理
In[11]: from itertools import compress
In[12]: list(compress([0,1,2,3,4,5,6],[True, False,True, False,True, False,True]))
Out[12]: [0, 2, 4, 6]
compress处理的对象长度可以不一样
In[14]: list(compress([0,1,2,3,4],[True, False,True, False,True, False,True])) Out[14]: [0, 2, 4] In[15]: list(compress([0,1,2,3,4,5,6],[True, False,True, False,True])) Out[15]: [0, 2, 4]
根据坐标过滤
这个时候列表生成式是比较方便的选择
In[26]: [['a','b','c','d','e'][i] for i in [2,4]]
Out[26]: ['c', 'e']
网友评论