#5月学习挑战#Python入门-基础语法-列表推导式

参加了CSDN的5月学习挑战,做到这个编程语言简史题目,对其中的写法有些好奇,遂进行了一下深入的学习。

B选项这个写法很让我好奇。

if __name__ == '__main__':
    languages = ...
    years = ...
    [print(languages[i], ':', years[i]) for i in range(0, len(languages))]

这里打印一句使用的是列表推导式,一种轻量级循环写法。

经学习,这种写法实际得到的会是一个新的数组,有点类似于Java的stream.map的写法。这里面因为默认languages和years等长,所以i遍历一个就可以了。

如果两个甚至多个循环长度不等。如下,只需要将对应变量赋予不同范围即可,可以看出有几个for循环,就会嵌套基层,所以使用时还是应该考虑清楚范围和算法是否合理。毕竟3阶以上遍历的数量会增加的很恐怖。

print([(x, y) for x in range(3) for y in range(2)])
# output:
# [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]

有意思的是,这种列表推导式还可以加入一些行为,比如选项中的print,它意味着每循环一次便进行一次print操作。

[print(x, y) for x in range(3) for y in range(2)]
# output:
# 0 0
# 0 1
# 1 0
# 1 1
# 2 0
# 2 1

甚至,他还可以加入判断语句进行过滤,好方便,下面的代码,就是对x属于(0,1),y属于(0,1,2…9)的两个数组(for x in range(2) for y in range(10))行遍历相加(x + y),遍历相加的条件时y能整除3( if y % 3 == 0]

print([x + y for x in range(2) for y in range(10) if y % 3 == 0])
# output:
# [0, 3, 6, 9, 1, 4, 7, 10]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kiba_zwei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值