Day 27 : Python - 什麽是列表推导式?又该如何将它和if、if-else一起做使用?

如标题,这篇想和大家聊聊「列表推导式」是什麽东西

我们先看看范例再说明,这样大家会比较好理解


Ex 1:
如果你今天有一for回圈长这样:

# 依序印出0~9的二次方为何
for i in range(10):
    print(i*i)
# 结果为: 0 1 4 9 16 25 36 49 64 81

你可以用「列表推导式」将它改写成这样:

# 依序算出0~9的二次方为何,并将其结果存在一列表内,再用变数result储存
result = [i*i for i in range(10)]
print(result)
# 结果为: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

看完范例一,再看看范例二

Ex 2:
有一列表为Ax,现在你想用for回圈和if去找4的倍数有哪些,并将它们印出来:

Ax = [20, 22, 16, 15, 18, 17]
# 有一列表为Ax,for回圈会执行len(Ax)次,len(Ax)是计算Ax的总长度为何
for i in range(len(Ax)):
	# 判断Ax内有无4的倍数,有则印出
    if (Ax[i]%4==0):
        print(Ax[i])
# 结果为: 20 16

你可以用「列表推导式」将它们改写成这样:

# 判断Ax内有无4的倍数,有则将结果存在一列表内,并用变数result储存
result = [Ax[i] for i in range(len(Ax)) if Ax[i]%4==0]
print(result)
# 结果为: [20, 16]

看到这里,你应该猜到「列表推导式」的功用是什麽了
它的「目的」是为了让程序码看起来更加简洁,在撰写上会更方便快速,其结果会存到「一列表内」,所以答案印出来都会是列表的形式

其架构如下:

[结果  for  变数  in  范围]

它也可以将if-else等判断式写在里面,但请注意! 如果只有「单一if」的时候,它需写在「范围的後面

其架构如下:

[if的结果  for  变数  in  范围  if (if的判断条件)]

如果是「if-else同时出现」,需写在「for的前面

其架构如下:

[if的结果  if (if的判断条件)  else  else的结果  for  变数  in  范围]

知道if-else同时出现的架构後,让我们看看范例三

Ex 3:
给你一个列表year,今天要你在year这个列表内,找出闰年为何:

year = [2015, 2020, 2012, 2013]
# 有一列表为year,for回圈会执行len(year)次
for i in range(len(year)):
    # 判断year内有哪些是闰年,是则印出是闰年,不是则印出不是闰年
    if ((year[i]%4==0 and year[i]%100!=0) or year[i]%400==0):
        print(year[i], "是闰年")
    else:
        print(year[i], "不是闰年")
# 结果为:2015 不是闰年
#        2020 是闰年
#        2012 是闰年
#        2013 不是闰年

你可以用「列表推导式」将它们改写成这样:

# 判断year内有哪些是闰年,是则印出是闰年,不是则印出不是闰年,并将其结果存在一列表内,用变数LeapYear储存
LeapYear = [(year[i], "是闰年") if ((year[i]%4==0 and year[i]%100!=0) or year[i]%400==0) else (year[i], "不是闰年") for I, v in enumerate(year)]
print(LeapYear)
# 结果为: [(2015, '不是闰年'), (2020, '是闰年'), (2012, '是闰年'), (2013, '不是闰年')]

以上就是今天的介绍

如果你想加上ifif-else的判断式,请务必记住它的摆放位置!
因为我之前一直把if-else放在「范围的後面」,以至於程序一直报错,所以它的摆放位置真的是世界宇宙无敌重要!!!


<<:  Day26-保护鲸鱼人人有责(一)

>>:  Day 27 - 依 Yachts - Specification 前台页面分析拆解後,逐步建立 Specification 後台功能 - 换行跳脱字元 - ASP.NET Web Forms C#

Day 14:GUI Design Tool 之所见即所得?

前面的 juce::Rectangle 简易拉版面技巧,难免给人「这个高科技会不会太落後?」的错觉。...

Chat & SignalR (Ionic)

Day 26 Chat & SignalR (Server) 中後端已经准备好了。这边开始来...

Day16-守护饼乾大作战(三)

前言 前两天介绍完 Secure、HttpOnly、SameSite 几个跟 cookie 安全性有...

电子工作日志纪录的重要性

上一篇讲到离职时整理档案的重要,相对的每个人的工作日志或工作排程,也是个人的保命符,一定要写得清楚明...

[面试][白板题]设计一个简易的抽奖程序

白板题跟系统设计问题的相同点,就是重视厘清问题与沟通。 相比於系统设计,白板题往往需要写出能够运行...