摘要:在本节中,你将学习如何使用 Python 的集合推导式,基于一个已有的集合来创建一个新的集合。
Python 集合推导式简介
假设你有下面这样一个由三个标签组成的集合:
tags = {'Django', 'Pandas', 'Numpy'}
要将集合中的标签转换为另一组小写形式的标签,你可以使用以下 for
循环:
tags = {'Django', 'Pandas', 'Numpy'}
lowercase_tags = set()
for tag in tags:
lowercase_tags.add(tag.lower())
print(lowercase_tags)
输出:
{'django', 'numpy', 'pandas'}
它的工作原理如下:
首先,遍历
tags
集合中的每个元素。其次,将每个标签转换为小写形式,并将其添加到新的集合(
lowercase_tags
)中。
或者你可以将内置的 map()
函数与一个 lambda 表达式配合使用:
tags = {'Django', 'Pandas', 'Numpy'}
lowercase_tags = set(map(lambda tag: tag.lower(), tags))
print(lowercase_tags)
map()
函数会返回一个映射对象,所以你需要使用 set()
函数将其转换为一个集合。
为了让代码更加简洁,Python 为你提供了如下的集合推导式语法:
{expression for element in set if condition}
集合推导式允许你基于一个已有的集合创建一个新的集合。
集合推导式包含以下几个步骤:
首先,遍历一个集合中的元素。
其次,对每个元素应用一个表达式。
第三,创建一个由该表达式运算结果所组成的新集合。
此外,集合推导式允许你通过 if
子句中的条件来选择对哪些元素应用该表达式。
请注意,集合推导式会返回一个新的集合,它不会修改原始集合。
回到前面的例子,你可以使用下面的集合推导式来转换 tags
集合中的所有标签:
tags = {'Django', 'Pandas', 'Numpy'}
lowercase_tags = {tag.lower() for tag in tags}
print(lowercase_tags)
输出:
{'numpy', 'pandas', 'django'}
这种语法看起来肯定比 for
循环更加简洁,也比 map()
函数更加优雅。
带 if
子句的 Python 集合推导式示例
假设你想把 tags
集合中除Numpy
之外的所有元素都转换为小写形式。
要实现这一点,你可以像这样在集合推导式中添加一个条件:
tags = {'Django', 'Pandas', 'Numpy'}
new_tags = {tag.lower() for tag in tags if tag != 'Numpy'}
print(new_tags)
输出:
{'django', 'pandas'}
总结
使用 Python 的集合推导式,通过对现有集合的每个元素应用一个表达式,基于该现有集合来创建一个新的集合。