|
| 1 | +<div align="center"> |
| 2 | + <h1>Python 30 天挑战:第 13 天 - 列表推导式</h1> |
| 3 | + <a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/"> |
| 4 | + <img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social"> |
| 5 | + </a> |
| 6 | + <a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh"> |
| 7 | + <img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social"> |
| 8 | + </a> |
| 9 | + |
| 10 | +<sub>作者: |
| 11 | +<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br> |
| 12 | +<small>第二版: 2021 年 7 月</small> |
| 13 | +</sub> |
| 14 | + |
| 15 | +</div> |
| 16 | +</div> |
| 17 | + |
| 18 | +[<< 第 12 天](../12_Day_Modules/12_modules.md) | [第 14 天>>](../14_Day_Higher_order_functions/14_higher_order_functions.md) |
| 19 | + |
| 20 | + |
| 21 | + |
| 22 | +- [📘 第 13 天](#📘-第-13-天) |
| 23 | + - [列表推导式](#列表推导式) |
| 24 | + - [Lambda 函数](#lambda函数) |
| 25 | + - [创建 Lambda 函数](#创建-lambda-函数) |
| 26 | + - [Lambda 函数在另一个函数中](#lambda-函数在另一个函数中) |
| 27 | + - [💻 练习:第 13 天](#💻-练习第-13-天) |
| 28 | + |
| 29 | +# 📘 第 13 天 |
| 30 | + |
| 31 | +## 列表推导式 |
| 32 | + |
| 33 | +在 Python 中,列表推导式是一种从序列中创建列表的简洁方式。它是创建新列表的简短方法。列表推导式比使用 _for_ 循环处理列表快得多。 |
| 34 | + |
| 35 | +```py |
| 36 | +# 语法 |
| 37 | +[i for i in iterable if 表达式] |
| 38 | +``` |
| 39 | + |
| 40 | +**例子: 1** |
| 41 | + |
| 42 | +例如,如果你想将字符串转换为字符列表。你可以使用几种方法。我们来看看其中的一些: |
| 43 | + |
| 44 | +```py |
| 45 | +# 一种方法 |
| 46 | +language = 'Python' |
| 47 | +lst = list(language) # 将字符串转换为列表 |
| 48 | +print(type(lst)) # list |
| 49 | +print(lst) # ['P', 'y', 't', 'h', 'o', 'n'] |
| 50 | + |
| 51 | +# 第二种方法: 列表推导式 |
| 52 | +lst = [i for i in language] |
| 53 | +print(type(lst)) # list |
| 54 | +print(lst) # ['P', 'y', 't', 'h', 'o', 'n'] |
| 55 | +``` |
| 56 | + |
| 57 | +**例子: 2** |
| 58 | + |
| 59 | +例如,如果你想生成一个数字列表 |
| 60 | + |
| 61 | +```py |
| 62 | +# 生成数字 |
| 63 | +numbers = [i for i in range(11)] # 生成从0到10的数字 |
| 64 | +print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
| 65 | + |
| 66 | +# 也可以在迭代过程中进行数学运算 |
| 67 | +squares = [i * i for i in range(11)] |
| 68 | +print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
| 69 | + |
| 70 | +# 还可以生成元组列表 |
| 71 | +numbers = [(i, i * i) for i in range(11)] |
| 72 | +print(numbers) # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] |
| 73 | +``` |
| 74 | + |
| 75 | +**例子: 3** |
| 76 | + |
| 77 | +列表推导式可以与 if 表达式结合使用 |
| 78 | + |
| 79 | +```py |
| 80 | +# 生成偶数 |
| 81 | +even_numbers = [i for i in range(21) if i % 2 == 0] # 生成从0到21的偶数列表 |
| 82 | +print(even_numbers) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] |
| 83 | + |
| 84 | +# 生成奇数 |
| 85 | +odd_numbers = [i for i in range(21) if i % 2 != 0] # 生成从0到21的奇数列表 |
| 86 | +print(odd_numbers) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] |
| 87 | + |
| 88 | +# 过滤数字:让我们从下面的列表中过滤出正偶数 |
| 89 | +numbers = [-8, -7, -3, -1, 0, 1, 3, 4, 5, 7, 6, 8, 10] |
| 90 | +positive_even_numbers = [i for i in range(21) if i % 2 == 0 and i > 0] |
| 91 | +print(positive_even_numbers) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] |
| 92 | + |
| 93 | +# 扁平化三维数组 |
| 94 | +list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
| 95 | +flattened_list = [number for row in list_of_lists for number in row] |
| 96 | +print(flattened_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9] |
| 97 | +``` |
| 98 | + |
| 99 | +## Lambda 函数 |
| 100 | + |
| 101 | +Lambda 函数是没有名字的小匿名函数。它可以接受任意数量的参数,但只能有一个表达式。Lambda 函数类似于 JavaScript 中的匿名函数。当我们想在另一个函数中编写匿名函数时,需要它。 |
| 102 | + |
| 103 | +### 创建 Lambda 函数 |
| 104 | + |
| 105 | +要创建一个 lambda 函数,我们使用 _lambda_ 关键字,然后是一个或多个参数,再然后是一个表达式。请参阅下面的语法和示例。Lambda 函数不用 return,但它会隐式地返回表达式。 |
| 106 | + |
| 107 | +```py |
| 108 | +# 语法 |
| 109 | +x = lambda param1, param2, param3: param1 + param2 + param3 |
| 110 | +print(x(arg1, arg2, arg3)) |
| 111 | +``` |
| 112 | + |
| 113 | +**示例:** |
| 114 | + |
| 115 | +```py |
| 116 | +# 命名函数 |
| 117 | +def add_two_nums(a, b): |
| 118 | + return a + b |
| 119 | + |
| 120 | +print(add_two_nums(2, 3)) # 5 |
| 121 | + |
| 122 | +# 让我们将上述函数更改为 lambda 函数 |
| 123 | +add_two_nums = lambda a, b: a + b |
| 124 | +print(add_two_nums(2, 3)) # 5 |
| 125 | + |
| 126 | +# 自调用 lambda 函数 |
| 127 | +print((lambda a, b: a + b)(2, 3)) # 5 |
| 128 | + |
| 129 | +square = lambda x: x ** 2 |
| 130 | +print(square(3)) # 9 |
| 131 | +cube = lambda x: x ** 3 |
| 132 | +print(cube(3)) # 27 |
| 133 | + |
| 134 | +# 多个变量 |
| 135 | +multiple_variable = lambda a, b, c: a ** 2 - 3 * b + 4 * c |
| 136 | +print(multiple_variable(5, 5, 3)) # 22 |
| 137 | +``` |
| 138 | + |
| 139 | +### Lambda 函数在另一个函数中 |
| 140 | + |
| 141 | +在另一个函数中使用 lambda 函数。 |
| 142 | + |
| 143 | +```py |
| 144 | +def power(x): |
| 145 | + return lambda n: x ** n |
| 146 | + |
| 147 | +cube = power(2)(3) # 函数 power 现在需要两个单独的括号中的参数 |
| 148 | +print(cube) # 8 |
| 149 | +two_power_of_five = power(2)(5) |
| 150 | +print(two_power_of_five) # 32 |
| 151 | +``` |
| 152 | + |
| 153 | +🌕 继续保持良好的工作。保持动力,天空才是你的极限!你已经完成了第 13 天的挑战,你已经向伟大的目标迈出了 13 步。现在为你的大脑和肌肉来做一些练习。 |
| 154 | + |
| 155 | +## 💻 练习: 第 13 天 |
| 156 | + |
| 157 | +1. 使用列表推导式过滤出列表中的负数和零: |
| 158 | + ```py |
| 159 | + numbers = [-4, -3, -2, -1, 0, 2, 4, 6] |
| 160 | + ``` |
| 161 | +2. 将以下列表中的列表展平为一维列表: |
| 162 | + |
| 163 | + ```py |
| 164 | + list_of_lists = [[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]]] |
| 165 | + |
| 166 | + 输出: |
| 167 | + [1, 2, 3, 4, 5, 6, 7, 8, 9] |
| 168 | + ``` |
| 169 | + |
| 170 | +3. 使用列表推导式创建以下元组列表: |
| 171 | + ```py |
| 172 | + [(0, 1, 0, 0, 0, 0, 0), |
| 173 | + (1, 1, 1, 1, 1, 1, 1), |
| 174 | + (2, 1, 2, 4, 8, 16, 32), |
| 175 | + (3, 1, 3, 9, 27, 81, 243), |
| 176 | + (4, 1, 4, 16, 64, 256, 1024), |
| 177 | + (5, 1, 5, 25, 125, 625, 3125), |
| 178 | + (6, 1, 6, 36, 216, 1296, 7776), |
| 179 | + (7, 1, 7, 49, 343, 2401, 16807), |
| 180 | + (8, 1, 8, 64, 512, 4096, 32768), |
| 181 | + (9, 1, 9, 81, 729, 6561, 59049), |
| 182 | + (10, 1, 10, 100, 1000, 10000, 100000)] |
| 183 | + ``` |
| 184 | +4. 将以下列表展平成一个新列表: |
| 185 | + ```py |
| 186 | + countries = [[('芬兰', '赫尔辛基')], [('瑞典', '斯德哥尔摩')], [('挪威', '奥斯陆')]] |
| 187 | + 输出: |
| 188 | + [['芬兰', '汇编', '赫尔辛基'], ['瑞典', 'SWE', '斯德哥尔摩'], ['挪威', 'NOR', '奥斯陆']] |
| 189 | + ``` |
| 190 | +5. 将以下列表转换为字典列表: |
| 191 | + ```py |
| 192 | + countries = [[('芬兰', '赫尔辛基')], [('瑞典', '斯德哥尔摩')], [('挪威', '奥斯陆')]] |
| 193 | + 输出: |
| 194 | + [{'国家': '芬兰', '城市': '赫尔辛基'}, |
| 195 | + {'国家': '瑞典', '城市': '斯德哥尔摩'}, |
| 196 | + {'国家': '挪威', '城市': '奥斯陆'}] |
| 197 | + ``` |
| 198 | +6. 将以下列表转换为连接字符串的列表: |
| 199 | + ```py |
| 200 | + names = [[('Asabeneh', 'Yetayeh')], [('David', 'Smith')], [('Donald', 'Trump')], [('Bill', 'Gates')]] |
| 201 | + 输出: |
| 202 | + ['Asabeneh Yetayeh', 'David Smith', 'Donald Trump', 'Bill Gates'] |
| 203 | + ``` |
| 204 | +7. 编写一个 lambda 函数,可以求解线性函数的斜率或 y 截距。 |
| 205 | + |
| 206 | +🎉 祝贺你!🎉 |
| 207 | + |
| 208 | +[<< 第 12 天](../12_Day_Modules/12_modules.md) | [第 14 天>>](../14_Day_Higher_order_functions/14_higher_order_functions.md) |
0 commit comments