90. Python列表推导式

90. Python列表推导式

文章目录

  • 90. Python列表推导式
    • 1. 知识回顾
      • 1.1 append函数知识回顾
      • 1.2 range函数知识回顾
      • 1.3 if 条件判断奇偶数
    • 2. 课题导入
      • 2.1 直接创建列表
      • 2.2 while循环创建列表
      • 2.3 for循环创建列表
      • 2.4 用列表推导式创建列表
    • 3. 什么是列表推导式
    • 4. 列表推导式的作用
      • 4.1 作用1:变形
      • 4.2 作用2:过滤
    • 5. 实操练习
      • 5.1 输出20以内的奇数
      • 5.2 输出一个整数各个位数上的数字
      • 5.3 调整列表顺序
      • 5.4 用map函数输出列表中所有元素的平方数

1. 知识回顾

1.1 append函数知识回顾

29.append函数向列表添加元素

append [əˈpend]增加,附加。

【语法】

列表名.append(要增加的元素)

【代码示例】

# 创建列表 name_list
name_list = ['张三']

# 用 append() 给列表 name_list 添加一个元素 '王五'
# 列表名.append(要增加的元素)
name_list.append('王五')

# 输出 name_list 列表
print(name_list)

【终端输出】

['张三', '王五']

1.2 range函数知识回顾

42. range函数—生成器函数

range[reɪndʒ]:按一定的次数排列。

【语法】

range(开始字符,结束字符,步长)

【参数说明】

  1. 参数start:表示起始的整数(包含该整数),如果不指定,则默认为0

  2. 参数end:表示结束的整数(不包含该整数),不能省略。

  3. 参数step:表示步长,即两个数之间的间隔。如果省略,则默认为1,当省略该步长时,最后一个英文逗号也可以省略。

【重点提示】

切片和range函数都包括开始字符,不包括结束字符,简单记忆为含前不含后

【返回值】

range函数返回的是一个range对象。

range函数不能直接生成列表或元组,必需利用list、tuple函数将其转换成列表或元组。

【代码示例】

r1 = range(3)
r2 = range(1,3)
r3 = range(2,8,3)
print("r1的值为:",list(r1))
print("r2的值为:",list(r2))
print("r3的值为:",list(r3))

【终端输出】

r1的值为: [0, 1, 2]
r2的值为: [1, 2]
r3的值为: [2, 5]

1.3 if 条件判断奇偶数

【代码示例】

i = 9
if i%2 ==0 :
    print("i是偶数!")
else:
    print("i是奇数!")

【终端输出】

i是奇数!

【代码示例】

i = 4
if i%2 ==0 :
    print("i是偶数!")
else:
    print("i是奇数!")

【终端输出】

i是偶数!

%表示取余。

一个数除以2的余数为0则该数为偶数,否则为奇数。

2. 课题导入

【目标任务】

创建一个1~5的数字列表。

2.1 直接创建列表

list1= [1, 2, 3, 4, 5]
print(list1)

【终端输出】

[1, 2, 3, 4, 5]

列表用[]表示。

最简单粗暴的方法就是直接用[]创建。

2.2 while循环创建列表

list2 = [ ]   # 新建一个空列表备用
i = 1  #给变量i赋一个初始值1
while i<=5 : # 用i来控制循环次数
    list2.append(i) # 用append函数将i添加到空列表中
    i += 1 # i的累加    
print(list2)

【终端输出】

[1, 2, 3, 4, 5]

这里用while循环创建列表用了6行代码。

2.3 for循环创建列表

list3 = [] # 新建一个空列表备用
for i in range(1, 6): # 创建有规律的数字列表最便捷的方法就是用range函数
    list3.append(i) # 用append函数将i添加到空列表中
print(list3)

【终端输出】

[1, 2, 3, 4, 5]

这里用for循环创建列表用了4行代码。

2.4 用列表推导式创建列表

list4 = [ i for i in range(1,6)]
print(list4)

【终端输出】

[1, 2, 3, 4, 5]

这里用列表推导式创建列表仅用了2行代码。

【总结】

从代码的简洁程度来讲,用列表推导式创建列表最为简单。

3. 什么是列表推导式

【定义】

列表推导式就是利用表达式及已知的列表创建(控制)一个有规律的列表。

已知的列表可以替换成可迭代对象。

【语法】

[表达式 for 迭代变量 in 可迭代对象 if条件表达式]

【表达式分析】

列表推导式主要由4个部分组成。

  1. 英文中括号[]

  2. 表达式。

  3. for循环语句。

  4. if条件表达式。

if 条件表达式不是必须的,根据实际情况可以有也可以没有。

语法中英文中括号中[]的3个部分内容之间用空格间隔。

即表达式后加一个空格,然后跟一个for循环语句,然后再加一个空格,最后再写if条件判断语句。

【列表推导式示例】

list4 = [ i for i in range(1,6)]

【语法如下】

[表达式 for 迭代变量 in 可迭代对象]

第1个i指的是表达式。

for i in range(1,6)是一个for循环语句。

range(1,6)是一个可迭代对象,即定义中的已知列表。

for循环每次迭代都从range(1,6)取出元素,赋值给迭代变量i

然后利用表达式对迭代变量进行变形,生成一个新的列表。

这里的表达式就是迭代变量本身,因此生成的就是由迭代变量组成的新的列表。

4. 列表推导式的作用

列表推导式的作用就是简化代码。

4.1 作用1:变形

计算输出0~5序列的所有数的平方。

list5 = [ i**2 for i in range(1,6)]
print(list5)

【终端输出】

[1, 4, 9, 16, 25]

【定义】

列表推导式就是利用表达式及已知的列表创建(控制)一个有规律的列表。

【解析】

表达式:i**2

已知的列表:range(1,6)

创建的新列表:[1, 4, 9, 16, 25]

【语法如下】

[表达式 for 迭代变量 in 可迭代对象]

【推导式如下】

list5 = [ i**2 for i in range(1,6)]

4.2 作用2:过滤

计算输出10以内的偶数的平方。

list6 = [ i**2 for i in range(1,11) if  i%2==0]
print(list6)

【终端输出】

[4, 16, 36, 64, 100]

【定义】

列表推导式就是利用表达式及已知的列表创建(控制)一个有规律的列表。

【解析】

表达式:i**2

已知的列表:range(1,11)

创建的新列表:[4, 16, 36, 64, 100]

【语法如下】

[表达式 for 迭代变量 in 可迭代对象 if条件表达式]

【推导式如下】

list6 = [ i**2 for i in range(1,11)  if i%2==0]

和之前的代码相比,这里只是多了一个if条件判断语句if i%2==0

5. 实操练习

5.1 输出20以内的奇数

list7 = [ i for i in range(1,21) if i%2!=0]
print(list7)

【终端输出】

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

【语法解析】

表达式:i

for循环语句:for i in range(1,21)

if条件判断语句:if i%2!=0

已知的列表:range(1,21)

5.2 输出一个整数各个位数上的数字

【输入】

假设这个整数为2468。

【输出】

2 4 6 8

【代码示例】

x = 2468
y = [ int(i) for i in str(x)]
print(y)

【代码解析】

一个整数为2468,我们要依次取出该整数中的每个数字,我先用str函数将整数转换为字符串类型。

用for循环依次遍历该字符串,即可取出该数字中的每个字符,注意得到的是字符串类型。

x = 2468
for i in str(x):
    print(i)
print(type(i))

【终端输出】

2
4
6
8

题目要求是要输出数字,因此我们又利用int函数将字符串类型的字符转换为整数。

x = 2468
for i in str(x):
    print(int(i))
print(type(int(i)))

【终端输出】

2
4
6
8

这是我们之前掌握的方法,学了列表推导式,我们只需一行代码就可以解决该问题了,如下所示:

x = 2468
y = [ int(i) for i in str(x)]
print(y)

【语法解析】

表达式:int(i)

for循环语句:for i in str(x)

可迭代对象:str(x)

5.3 调整列表顺序

已知一个整数列表,要求调整元素顺序,把列表中的奇数放在列表的前面,偶数放在列表的后面。

【输入】

[1,2,3,4,5,6,7,8]

【输出】

[1,3,5,7,2,4,6,8]

【思路解析】

  1. 取出整数列表中的奇数放入列表x中。

  2. 取出整数列表中的偶数放入列表y中。

  3. 合并列表x和y。

x = [i for i in range(1,9) if i%2 != 0]
print(x)
y = [i for i in range(1,9) if i%2 == 0]
print(y)
print(x+y)

【终端输出】

[1, 3, 5, 7]
[2, 4, 6, 8]
[1, 3, 5, 7, 2, 4, 6, 8]

【语法解析】

表达式:i

for循环语句:in range(1,9)

if条件判断语句:if i%2 != 0

已知的列表:range(1,9)

5.4 用map函数输出列表中所有元素的平方数

list1 = [1,2,3,4]
def fn (x):
    return x**2
res = map(fn, list1)
res = [i for i in res]
print(res)

【终端输出】

[1, 4, 9, 16]

【代码解析】

自定义一个函数fn。

x就是自定义函数fn的参数。

函数fn返回的是x的平方。

【代码示例】

def fn (x):
    return x**2
fn(3)

【终端输出】

9

fn(3)调用自定义函数。

这里的3传递给了fn函数的参数x。

题目要求的是输出列表中所有数的平方数,因此传递的参数就不是一个数,应该是列表里的所有元素。

res = map(fn, list1)

map函数的相关知识在第83节,链接如下:

83.map函数()-通过函数实现对可迭代对象的操作

map [mæp]:地图,映射。

【语法】

map(function, iterables=, ...)

【功能】

map函数接收一个函数为它的参数,接收一个或多个可迭代对象为另一个参数,返回一个迭代器。

此迭代器中的每个元素都是函数参数依次作用于可迭代对象后的结果。

map函数在这里的功能就相当于依次取出列表中的元素,进行fn函数运算,然后返回的结果是迭代器。

要显示迭代器里的具体内容,我们可以通过list函数,也可以用列表推导式。

map函数的参数1是fn自定义函数。

map函数的参数2是list1列表。

map函数返回的是一个迭代器。

【代码示例】

list1 = [1,2,3,4]
def fn (x):
    return x**2
res = map(fn, list1)
print(res)

【终端输出】


【列表推导式输出迭代器中的元素】

list1 = [1,2,3,4]
def fn (x):
    return x**2
res = map(fn, list1)

res = [i for i in res]
print(res)

【终端输出】

[1, 4, 9, 16]

i for i in res这是一个列表推导式。

表达式:i**2

已知的列表:res

创建的新列表:[1, 4, 9, 16]

【list函数输出迭代器中的元素】

list1 = [1,2,3,4]
def fn (x):
    return x**2
res = map(fn, list1)

print(list(res))

【终端输出】

[1, 4, 9, 16]

你可能感兴趣的:(python,数学建模,开发语言)