python基础——列表推导式

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=" ")

示例结果如下:

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i阿极

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值