今天我们学习python推导式(Comprehensions),我们可以用推导式代替一些循环操作,以下将给出推导式的相关例子
一般推导式
对列表进行操作
strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
[x.upper() for x in strings if len(x) > 2]
>>['BAT', 'CAR', 'DOVE', 'PYTHON']
unique_lengths = {len(x) for x in strings}
unique_lengths
>>{1, 2, 3, 4, 6}
当然也可以使用map结合len函数对strings列表进行操作
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}
嵌套列表推导式
针对列表嵌套列表
all_data = [['John', 'Emily', 'Michael', 'Mary', 'Steven'],
['Maria', 'Juan', 'Javier', 'Natalia', 'Pilar']]
names_of_interest = []
for names in all_data:
enough_es = [name for name in names if name.count('e') >= 2]
names_of_interest.extend(enough_es)
names_of_interest
>>['Steven']
上述运用循环结构的方法等价于以下推导式方法
result = [name for names in all_data for name in names if name.count('e') >= 2]
result
>>['Steven']
针对列表嵌套元组
flattened = []
for tup in some_tuples:
for x in tup:
flattened.append(x)
print(flattened)
>>[1, 2, 3, 4, 5, 6, 7, 8, 9]
上述运用循环结构的方法等价于以下推导式方法
some_tuples = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
flattened = [x for tup in some_tuples for x in tup]
flattened
>>[1, 2, 3, 4, 5, 6, 7, 8, 9]
以上代码只是对于书籍《利用Python进行数据分析》的相关重述,便于对于python推导式的参考和借鉴。想要熟练的掌握,还需要在编程实践中更深入的学习。