Python的列表、集合和字典推导式


列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传 递参数的过程中还可以修改元素。形式如下:

[expr for val in collection if condition]

它等同于下面的for循环:

result = []
for val in collection:
if condition: result.append(expr)

filter条件可以被忽略,只留下表达式就行。例如,给定一个字符串列表,我们可以过滤出⻓度在2及以 下的字符串,并将其转换成大写:

strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
 [x.upper() for x in strings if len(x) > 2]
输出 ['BAT', 'CAR', 'DOVE', 'PYTHON']

用相似的方法,还可以推导集合和字典。字典的推导式如下所示:

dict_comp = {key-expr : value-expr for value in collection if condition}

集合的推导式与列表很像,只不过用的是尖括号:

set_comp = {expr for value in collection if condition}

与列表推导式类似,集合与字典的推导也很方便,而且使代码的读写都很容易。来看前面的字符串列表。假如我们只想要字符串的⻓度,用集合推导式的方法非常方便:

unique_lengths = {len(x) for x in strings}
unique_lengths 
输出: {1, 2, 3, 4, 6}

map 函数可以进一步简化:

set(map(len, strings))
输出: {1, 2, 3, 4, 6}

作为一个字典推导式的例子,我们可以创建一个字符串的查找映射表以确定它在列表中的位置:

loc_mapping = {val : index for index, val in enumerate(strings)}
loc_mapping
输出: {'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'dove': 4, 'python': 5}