如标题,这篇想和大家聊聊「列表推导式」是什麽东西
我们先看看范例再说明,这样大家会比较好理解
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, '不是闰年')]
以上就是今天的介绍
如果你想加上if
或if-else
的判断式,请务必记住它的摆放位置!
因为我之前一直把if-else
放在「范围的後面」,以至於程序一直报错,所以它的摆放位置真的是世界宇宙无敌重要!!!
前面的 juce::Rectangle 简易拉版面技巧,难免给人「这个高科技会不会太落後?」的错觉。...
Day 26 Chat & SignalR (Server) 中後端已经准备好了。这边开始来...
前言 前两天介绍完 Secure、HttpOnly、SameSite 几个跟 cookie 安全性有...
上一篇讲到离职时整理档案的重要,相对的每个人的工作日志或工作排程,也是个人的保命符,一定要写得清楚明...
白板题跟系统设计问题的相同点,就是重视厘清问题与沟通。 相比於系统设计,白板题往往需要写出能够运行...