先說點廢話:
最開始我是通過一本書來入門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