1.案例
过滤掉列表[3, 9, -1, 10, 20,-2…]中的负数
筛选出字典{“LiLei”:79, “Jim”:88,“Lucy”:92…}中值高于90的项
筛选出集合{77, 89, 32, 20…}中能被3整除的元素
2.解决方案
列表:
列表解析:[x for x in data if x>=0]
filter函数:filter(lambda x:x>=0,data)
字典
字典解析:{k:v for k,v in d.items() if v>=90}
集合:
集合解析:{x for x in s if x%3==0}
3.代码实现
In [15]: from random import randint
In [16]: l = [randint(-10, 10) for _ in range(10)]
In [17]: l
Out[17]: [-2, 3, -9, -1, -9, -2, -3, 3, -4, -4]
In [18]: [x for x in l if x>=0]
Out[18]: [3, 3]
In [19]: list(filter(lambda x:x>=0, l))
Out[19]: [3, 3]
In [20]: { "student%d" % i:randint(50, 100) for i in range(1, 21)}
Out[20]:
{'student1': 99,
'student2': 60,
'student3': 55,
'student4': 51,
'student5': 72,
'student6': 73,
'student7': 98,
'student8': 86,
'student9': 60,
'student10': 55,
'student11': 92,
'student12': 78,
'student13': 74,
'student14': 59,
'student15': 84,
'student16': 66,
'student17': 88,
'student18': 57,
'student19': 65,
'student20': 56}
In [21]: d = { "student%d" % i:randint(50, 100) for i in range(1, 21)}
In [25]: {k:v for k, v in d.items() if v>=90}
Out[25]:
{'student3': 90,
'student11': 93,
'student12': 100,
'student18': 99,
'student19': 100}
In [27]: {filter(lambda item:item[1]>=90, d.items())}
Out[27]: {<filter at 0x7f97ed18fbe0>}
In [28]: g = filter(lambda x:x[1]>=90, d.items())
In [29]: list(g)
Out[29]:
[('student3', 90),
('student11', 93),
('student12', 100),
('student18', 99),
('student19', 100)]
In [30]: dict(g)
Out[30]: {}
In [31]: g = filter(lambda x:x[1]>=90, d.items())
In [32]: dict(g)
Out[32]:
{'student3': 90,
'student11': 93,
'student12': 100,
'student18': 99,
'student19': 100}
In [34]: {randint(0,20) for _ in range(20)}
Out[34]: {2, 3, 4, 5, 6, 7, 9, 11, 12, 14, 17, 18, 20}
In [35]: s = {randint(0,20) for _ in range(20)}
In [36]: {x for x in s if x%3==0}
Out[36]: {0, 3, 9, 15, 18}