python基础——列表推导式
一、实验目的
掌握Python数据结构:列表推导式的用法。
二、实验原理
列表推导式(list comprehension)列表推导式形式较为简洁,是利用其它列表创建新列表的一种方式,它的工作方式类似于for循环,也可以嵌套if条件判断语句。
基本格式:
variable = [out_exp_res for out_exp in input_list if out_exp == 2]
out_exp_res:列表生成元素表达式,可以是有返回值的函数。
for out_exp in input_list:迭代input_list将out_exp传入out_exp_res表达式中。
if out_exp == 2:根据条件过滤哪些值可以。
三、实验环境
Python 3.6以上
Ipython
PyCharm
四、实验内容
本实验详细介绍了Python数据结构:列表推导式的用法
五、实验步骤
1.利用列表推导式求0~9的二次方,示例如下:
list1=[x*x for x in range(10)]
print(list1)
结果如下:
相当于
list2=[]
for x in range(10):
list2.append(x*x)
list2
示例结果如下:
2.使用列表推导式实现嵌套列表的平铺,示例如下:
lists= [[1,2,3],[4,5,6],[7,8,9]]
[one for list1 in lists for one in list1]
示例结果如下:
在这个列表推导式中有2个循环,其中第一个循环可以看作是外循环,执行的慢,而第二个循环可以看作是内循环,执行的快,上面代码的执行过程等价于下面的写法,示例如下:
lists = [[1,2,3],[4,5,6],[7,8,9]]
result = []
for list1 in lists :
for one in list1 :
result.append(one)
result
示例结果如下:
3.过滤不符合条件的元素,在列表推导式中可以使用if子句来进行筛选,只在结果列表中保留符合条件的元素,示例如下:
list1= [-5,-9,4,-8,1,8,3,4,9,22,15]
list2=[i for i in list1 if i>0]
list2
示例结果如下:
4.已知有一个包含同学成绩的字典,请计算成绩的最高分、最低分、平均分,并查找拥有最高分的同学,示例如下:
scores = {'zhang san':45,'li si':78,'wang wu':40,'zhou liu':96,'zhao qi':65,'su ba':90,'zheng jiu':78,'wu shi':99,'dong shiyi':60}
highest=max(scores.values())
print('The highest score:',highest)
lowest = min(scores.values())
print('The lowest score:',lowest)
average = sum(scores.values())/len(scores)
print('The Averagescore:',average )
highestPerson = [name for name,score in scores.items() if score == highest]
print('The name of the highest grade student:',highestPerson )
示例结果如下:
5.在列表推导式中使用多个循环,实现多序列元素的任意组合,并且可以结合条件语句过滤特定元素,示例如下
[(x,y) for x in [1,2,3] for y in [3,1,4] if x != y]
示例结果如下:
该示例代码等价于
result=[]
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
result.append((x,y))
result
6.使用列表推导式实现矩阵转置,示例如下:
list1= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
[[row[i] for row in list1] for i in range(4)]
示例结果如下:
也可以使用内置函数zip()和list()来实现矩阵转置,示例如下:
list1= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
list(map(list,zip(*list1)))
7.列表推导式中可以使用函数或复杂表达式,示例如下:
def f(v):
if v%2==0:
v=v**2
else:
v=v+1
return v
print([f(v) for v in [2,3,4,-1] if v>0])
print([v**2 if v%2 == 0 else v+1 for v in [2,3,4,-1] if v>0])
示例结果如下:
8.使用列表推导式生成100以内的所有素数,示例如下:
import math
print([p for p in range(2,100) if 0 not in [p%d for d in range (2,int(math.sqrt(p)) +1)]],end=" ")
示例结果如下: