--- fid: 20240729-153557 tags: string, f-string --- (20240729-153557)= # 列表推导式与f字符串 2024-07-29 **难度**: 3 **时长**: 30 min 下面的Python 代码使用了什么技巧? ```Python a = [1,2,3,4,5] b = f""" Title {"".join((f'\n - I am {i}' for i in a))} # {"".join([f'\n - I am {i}' for i in a])} """ ``` ## Kimi's Answer 这段Python代码使用了几种技巧和特性: 1. **列表解析**:`a = [1,2,3,4,5]` 定义了一个包含整数1到5的列表。 2. **字符串格式化**:`f"""` 定义了一个多行的格式化字符串(也称为f-string)。f-string是Python 3.6及以后版本中引入的一种新的字符串格式化方法,它允许在字符串中嵌入表达式,并且这些表达式会在运行时被计算和格式化。 3. **列表推导式**:`[f'\n - I am {i}' for i in a]` 是一个列表推导式,它遍历列表 `a` 中的每个元素 `i`,并将字符串 `'\n - I am {i}'` 格式化为包含当前元素值的字符串。 4. **字符串连接**:`"".join(...)` 将列表中的字符串元素连接成一个单一的字符串。这里,每个元素都是一个包含换行符和格式化文本的字符串。 5. **多行字符串**:整个 `f"""` 字符串跨越了多行,这使得代码更加可读,尤其是在处理多行文本时。 6. **格式化表达式**:在f-string中,`{i}` 是一个格式化表达式,它会被替换为列表中当前元素的值。 综合这些技巧,代码的执行流程如下: - 创建一个包含数字1到5的列表 `a`。 - 使用列表推导式生成一个包含格式化字符串的列表,每个字符串包含一个数字和文本 `'\n - I am {i}'`。 - 使用 `"".join(...)` 将这些字符串连接成一个单一的多行字符串。 - 将生成的多行字符串赋值给变量 `b`。 最终,变量 `b` 将包含以下文本: ``` Title - I am 1 - I am 2 - I am 3 - I am 4 - I am 5 ``` 问: 在Python中,除了列表推导式和f-string,还有哪些字符串格式化的方法? 这种代码模式通常被称为"列表推导式"(List Comprehension)结合"f-string"(Formatted String Literals)的使用。列表推导式是一种简洁的构建列表的方法,允许在Python中通过一个表达式来生成列表。而f-string是Python 3.6及以上版本中引入的一种新的字符串格式化方法,它通过在字符串前加上字母 `f` 来启用,允许在字符串中嵌入表达式。 这种模式因其简洁性和表达力而广受欢迎,常用于快速生成列表或在字符串中嵌入变量或表达式的值。此外,由于f-string的可读性和效率,它在Python社区中被广泛推荐用于字符串格式化。 ## 更多应用实例 生成一个 Markdown 链接列表: ``` markdown_contents = f""" # Recent Notes List {''.join(f'\n - [{fid} - {title}]({url})' for fid, title, url in markdown_links)} """ ``` 生成一个 Html 链接列表: ``` html_content = f"""