列表推导式与f字符串

2024-07-29

难度: 3

时长: 30 min

下面的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"""
<ul>
    {''.join(f'<li><a href="{url}">{fid} - {title}</a></li>' 
    for fid, title, url in html_links)}
</ul>
"""