先说点废话:
最开始我是通过一本书来入门python的:《Head First Python》
记得当时学完for循环后,书里介绍了一种简化代码的方法,它可以通过一行代码从一个列表中取出数据然后追加到另一个列表中,没错,就是列表推导式
不过当时学完后,一直没想起来用,工作中遇到一些需要遍历取数的情况,直接用for循环了,一个不够,就直接上俩~~
最近在写脚本的时候,因为又一直在用for循环,代码看起来有点冗杂,所以突然想起来是不是可以用列表推导来代替
OK,废话完毕,下面开始进入正题,了解一下列表推导到底是个什么鬼?
1、创建一个列表,然后使用for循环将该列表中的数据添加到另一个列表中
heroes = ["亚瑟", "妲己", "橘右京", "阿轲", "王昭君", "马化腾"] # 原始列表 # 创建一个新列表hero_name,分别将heroes中的值追加到其中 # 1、使用for循环+append方法实现 hero_name = [] for hero in heroes: hero_name.append(hero) print(hero_name)
2、使用列表推导来将数据添加到一个新列表中
# 2、使用列表推导,将heroes中的数据取出来放到一个新列表中 hero_name = [hero for hero in heroes] print(hero_name)
打印结果如下
3、在列表推导式中加上if语句
# 结合if语句,例如取出来名称长度大于2的值 hero_name = [hero for hero in heroes if len(hero) > 2] print(hero_name)
打印结果如下
4、看一个复杂的例子,2个for循环如何转换成列表推导式
nums = [[1, 3, 5, 7], [2, 4, 6, 8]] # 使上述nums中的每个数字都取出来,放到一个新列表中,用到2个for循环 new_nums = [] for nums_a in nums: # print(nums_a) for i in nums_a: new_nums.append(i) print("new_nums的值为:{}".format(new_nums)) # 列表推导式 new_num = [i for nums_a in nums for i in nums_a] # 从左至右,分别是外层循环到内层循环;先把里面的2个小列表遍历一遍,然后再遍历每个小列表的数字; # 最后的表示结果的变量,写在最左侧 print("new_num的值为:{}".format(new_num)) # 加一个判断条件,如果大于6,就取出来 new_num_1 = [i for nums_a in nums for i in nums_a if i > 6] print("new_num_1的值为:{}".format(new_num_1)) # 定义一个函数,求平方 def square(x): return x * x new_num_2 = [square(i) for nums_a in nums for i in nums_a] # 把结果传到一个函数中 print("new_num_2的值为:{}".format(new_num_2))
打印结果如下
原书中的小tips