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=" ")
示例结果如下:
到此这篇关于python基础操作列表推导式的文章就介绍到这了,更多相关python列表推导式内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!