Python程序设计教程第二版-第四章

Python程序设计教程第二版-第四章

4.5推导式

4.5.1 列表推导式

形式:[函数/表达式 for语句 0至多个for/if语句]
逻辑上等价于循环语句,但形式上更简洁

1,列表推导式和for

如何将一个数字列表中的元素扩大两倍?
方法一:

n=[10,-33,21,55,117,510]
number=[]
for i in n:
    number.append(i*2)
print(number)

分析:使用for循环遍历n中的元素,然后将其扩大两倍增添到一个新列表中
方法二:

n=[10,-33,21,55,117,510]
number=[i*2 for i in n]
print(number)

分析:使用了列表推导式,注意一点在列表推导式中,函数/表达式与for语句不是用逗号隔开的

2.列表推导式中可以有多个for语句

列如:

n=[[10,-33,21],[5,-7,-9,3,28,-16,37]]
number=[j*2 for i in n for j in i]
print(number)
3,列表推导式和if

在列表推导式中,if起到筛选过滤的作用接着上面的例子,将正数扩大两倍组成新列表

n=[10,-33,21,55,117,510]
number=[i*2 for i in n if i>0]
print(number)

列表推导式中还可以使用if-else语句
例:将一个数字列表中的正偶数扩大两倍,正奇数扩大三倍

n=[1,2,-3,5,2,-8,8,7]
number=[i*2 if i%2==0 else i*3 for i in n if i>0]
print(number)

列题讲解
现有一产品1~30日的销售量如下
123,226,136,178,124,167,183,194,119,135,189,125,173,193,143,226,201,200,221,226,132,163,225,129,150,151,226,177,189,134,222
找出最大销售量,及所在日子输出

sales=[123,226,136,178,124,167,183,94,119,135,189,125,173,193,143,\
       226,201,200,221,226,132,163,225,129,150,151,226,177,189,134,222]
highest=max(sales)
hh=[i for i,j in enumerate(sales,1) if j==highest]
print("最大销量为:",highest)
print("销售日分别为:",end=' ')
4.列表推导式与函数

列表推导式中可以使用函数
利用列表推导式快速生成15个30~80之间的随机数

import  random
rlist=[random.randint(30,80) for i in range(15)]
print(rlist)

同时可以使用自己定义的函数

import  random
rlist=[random.randint(30,80) for i in range(15)]
print(rlist)
def ff(x):
    if x%3==0:
        x/=3
    elif x%7==0:
        x*=2
    else:
        x*=5
    return x
number=[ff(i) for i in rlist]
print(number)
5.使用列表推导式同时遍历多个列表
score1=[89,56,77,46,89,99,67]
score2=[34,99,58,68,99,89,98]
nn=[(i,j) for i in score1 if i>80 for j in score2 if j<60]
print(nn)

结尾彩蛋

# -*- coding:utf-8 -*-
import turtle
import time


# 画爱心的顶部
def LittleHeart():
    for i in range(200):
        turtle.right(1)
        turtle.forward(2)


# 输入表白的语句,默认I Love you
love = input('请输入表白语句,默认为输入为"I Love you": ')
# 输入署名或者赠谁,没有不执行
me = input('请输入您心上人的姓名或者昵称: ')
if love == '':
    love = 'I Love you'
# 窗口大小
turtle.setup(width=800, height=500)
# 颜色
turtle.color('red', 'pink')
# 笔粗细
turtle.pensize(5)
# 速度
turtle.speed(1)
# 提笔
turtle.up()
# 隐藏笔
turtle.hideturtle()
# 去到的坐标,窗口中心为0,0
turtle.goto(0, -180)
turtle.showturtle()
# 画上线
turtle.down()
turtle.speed(1)
turtle.begin_fill()
turtle.left(140)
turtle.forward(224)
# 调用画爱心左边的顶部
LittleHeart()
# 调用画爱右边的顶部
turtle.left(120)
LittleHeart()
# 画下线
turtle.forward(224)
turtle.end_fill()
turtle.pensize(5)
turtle.up()
turtle.hideturtle()
# 在心中写字 一次
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('#CD5C5C', 'pink')
# 在心中写字 font可以设置字体自己电脑有的都可以设 align开始写字的位置
turtle.write(love, font=('gungsuh', 30,), align="center")
turtle.up()
turtle.hideturtle()
time.sleep(2)
# 在心中写字 二次
turtle.goto(0, 0)
turtle.showturtle()
turtle.color('red', 'pink')
turtle.write(love, font=('gungsuh', 30,), align="center")
turtle.up()
turtle.hideturtle()
# 写署名
if me != '':
    turtle.color('black', 'pink')
    time.sleep(2)
    turtle.goto(180, -180)
    turtle.showturtle()
    turtle.write(me, font=(20,), align="center", move=True)

# 点击窗口关闭
window = turtle.Screen()
window.exitonclick()
上一篇:leetcode 226. 翻转二叉树


下一篇:QT-UE4 三维可视化