一、列表推导
列表推导式又称推导列表。列表推导式是以列表为载体,以推导的方式将数据生成并放在列表中。推导即规则,它支持for循环和筛选模式(if判断模式)。设定一个既定规则在列表中进行数据生成,列表推导式比传统方法更为简洁,代价是放弃一部分的可读性。
二、如何声明列表推导式
最简单的列表推导式,列表结构作为一个承载体
list_data=[x for x in range(10)] #[0,1,2,3,4,5,6,7,8,9]
每循环一次,向列表添加一个x的值,直到for全部完成。
三、列表推导式办法与传统方法的比较
推导模式
list_data=[x for x in range(10)] #[0,1,2,3,4,5,6,7,8,9] print(list_data)
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
传统模式
list_data2=[] for count in range(10): list_data2.append(count) print(list_data2)
输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
带判断的列表推导式
list_data1=[ x for x in range(10) if x%2==0] print(list_data1)
注意!在列表推导式中没有任何标点符号
for负责数据产生,if负责数据筛选,x负责最终数据输出
输出结果:
[0, 2, 4, 6, 8]
list_data=[x for x in range(0,20) if x>5] print(list_data)输出结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
list_data=[x for x in range(0,20) if x>5 and x<15] print(list_data)输出结果:
[6, 7, 8, 9, 10, 11, 12, 13, 14]
list_data2=[x**2 for x in range(10) if x%2==0] print(list_data2)输出结果: [0, 4, 16, 36, 64] 对推导式里的最终输出数据进行二次加工
list_data=[x+10 for x in range(0,20) if x%2==0] print(list_data)
输出结果:
[10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
List_data=[(x,y) for x in [1,2,3,4,5] if x>3 for y in [6,7,8,9,10] ] print(List_data)输出结果: [(4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10)]
列表推导式的双for循环
list_data1=[(x,y) for x in range(1,4) for y in range(4,7)] print(list_data1) list_data2=[(x,y) for x in [1,2,3] for y in [4,5,6]] print(list_data2)
先看输出的规律:第一个for的第一个元素与第二个for的每个元素进行组合,组合成一个元组
输出:
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
等同于以下函数
a=[1,2,3] b=[4,5,6] for x in a: for y in b: list_data.append((x,y)) print(list_data)
特别注意:
如果返回的是多个值,可以用一个多元数据结构进行返回,如例子中的元组,这样元组可以作为一个元素存在于列表中,推导列表无法一次接受两个元素。
列表推导式的for循环对两层列表进行循环
#列表推导式 data=[[1,2,3,4,5],[6,7,8,9,10]] list_data=[y for x in data for y in x] print(list_data) #传统写法 emplist=[] for x in data: for y in x: emplist.append(y) print(emplist)
输出结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
在字典中进行推导式
dict_data1={x: x for x in ['name','age','city']} print(dict_data1) dict_data2={str(x): x for x in[1,2,3]} print(dict_data2)
输出结果:
{'name': 'name', 'age': 'age', 'city': 'city'}
{'1': 1, '2': 2, '3': 3}
四、列表推导式的延伸使用
简单的字典推导式构建,注意!字典推导式不再使用方括弧[]
#列表推导式的延伸使用 fields=['姓名','年龄','城市'] info=['zz',28,'上海'] dict_data={x:y for x,y in zip(fields,info)} print(dict_data) #传统方法 dict_data={} for x,y in zip(fields,info): dict_data[x]=y
输出结果:{'姓名': 'zz', '年龄': 28, '城市': '上海'}
zip函数,俗称压缩,一对一映射
#zip函数的使用 fields=['姓名','年龄','城市'] info=['zz',28,'上海'] print(zip(fields,info)) print(list(zip(fields,info))) print(dict(list(zip(fields,info)))) dict_data={x:y for x,y in zip(fields,info)} print(dict_data)输出结果:
<zip object at 0x00000275ADE80380> [('姓名', 'zz'), ('年龄', 28), ('城市', '上海')] {'姓名': 'zz', '年龄': 28, '城市': '上海'}
#我们先看一下列表的这种操作 my_list1=['5'*10] #观察这个动作实际上是在操作一个元素,并没有对列表进行操作 print(my_list1) #这个动作实际上生成了多个列表并进行了合并 my_list2=['5']*10 #这个动作不可以添加逻辑进去,存在局限性 print(my_list2) #推导列表 my_list=[x for x in range(1000)] print(my_list) # 推导列表的效率,要比传统写法高50%左右 my_list=[] for x in range(10000): my_list.append(x) print(my_list)
标签:10,推导,Python,list,列表,print,data From: https://www.cnblogs.com/longlyseul/p/18136329