2.1 列表的解析
2.1.1 使用filter筛选器
filter(筛选条件,列表) filter有两个参数,第一个参 数是筛选条件,第二个参数是列表。筛选条件用lambda表达式
lambda表达式的书写格式为
lambda 变量: 表达式
这个表达式为bool类型,也就是说只要满足这个表达式就把函数返回值传给x。
值得注意的是从python 3.3之后 filter的返回值不再是一个列表而是一个iterators(迭代器) 是一个地址值。这里筛选需要一个强制类型转换list()。
代码部分:值得注意的是这个列表的生成格式
from random import randint
data=[randint(-10,10) for _ in range(10)]
data
[-1, -3, 3, 2, -4, 6, 4, -4, 6, 4]
首先写出[for i in range(10)]控制此列表循环几次。然后在循环条件的前面加上列表的元素值。[randint(-10,10) for _ in range(10)] 就生成了一个列表
筛选部分
list(filter(lambda x:x>=0,data))
[3, 2, 6, 4, 6, 4]
2.1.2 使用列表解析
这里的列表解析就是使用for。方法如下
首先写出循环[for x in data]
写出列表元素[x for x in data]
最后写出筛选条件[x for x in data if x>=0]
[x for x in data if x>=0]
[3, 2, 6, 4, 6, 4]
2.2 字典的解析
2.2.1 字典的生成
首先还是要讲到字典的生成,字典的生成书写方式跟列表相似。
1.写出循环体
[for x in range(1,21)]
2.写出元素,注意这是是字典所以是 键:值 对应 。那个属于循环就是x;
[x:randint(60,100) for x in range(1,21)]
{x:randint(60,100) for x in range(1,21)}
{1: 89, 2: 72, 3: 100, 4: 77, 5: 98, 6: 97, 7: 63, 8: 90, 9: 64, 10: 73, 11: 87, 12: 93, 13: 95, 14: 99, 15: 62, 16: 71, 17: 83, 18: 94, 19: 89, 20: 100}
2.2.2 解析
这里解析使用for 经过测试for 要比 filter快一倍
书写方法
1.写出循环体
{for keys, value in d.items()}
解释一下,这里使用的是字典的items()函数,在2.x是iteritems()。这是一个字典,当然items也是一个键-值对应的,所以这里的循环index需要两个,keys,value。
2.写出字典的元素(其实也就是字典形式)
{keys:value for keys, value in d.items()}
注意这里的字典元素是根据keys,value循环而来的,所以说需要名称对应。
3.写出筛选条件
{keys:value for keys, value in d.items() if x>90}
{keys:value for keys,value in d.items() if value>90}
{16: 99, 1: 94, 4: 91, 12: 96}的
2.3 集合的解析
2.3.1 集合的建立
使用set(list)
s=set(data)
s
{2, 3, 4, 6, -4, -3, -1}
把2.1 的列表变成了一个集合。集合去除了重复的元素
2.3.2 集合的筛选
使用for
1.老样子写出循环体
{for x in s}
2.写出元素
{x for x in s}
3.写出筛选条件
{x for x in s if x>=0}
{x for x in s if x>=0}
{2, 3, 4, 6}
over~ 敬请期待