列表推导式是最受欢迎的python语言特性之一。它允许你过滤一个容器的元素,用一种简明的表达式转换传递给过滤器的元素,从而生成一个新的列表。
推导式
列表表达式的最基本形式为:[expr for val in collection if condition]
过滤条件是可以忽略的,只保留表达式。例如:
strings = ['a','os','sex','urge','apple','python']
[x.upper() for x in strings if len(strings)>2]#输出['sex','urge','apple','python']
集合与字典的推导式是列表推导式的自然拓展,用类似的方法生成集合与字典。
字典的推导式如下:
dict_comp = {key-expr : value-expr for value in collection if condition}
集合推导式看起来很像列表推导式,只是中括号变成了大括号:
set_comp = {expr for value in collection if condition}
通过集合推导式设置一个集合包含列表中字符串的长度:
{len(x) for x in strings}
也可以用map函数更函数化,很简洁地表达:
set(map(len,strings))
创建一个字符串与其位置匹配的字典:
loc_mapping = {val : index for index,val in numerate(strings)}
嵌套列表推导式
all _name = [['john','emily','michael','mary','steven'],['maria','juan','javier','natalia','pilar']]
获得一个列表包含两个以上的字母e的名字:
result = [name for names in all_name for name in names if name.count('e') >= 2]#输出['steven']
列表推导式的for循环部分是根据嵌套的顺序排列的,所有的过滤条件像之前一样被放在尾部。
将含有整数元组的列表扁平化唯一个简单的整数列表:
some_tuplies = [(1,2,3),(4,5,6),(7,8,9)]
flattened = [x for tup in some_tuples for x in tup]#输出[1,2.3,4,5,6,7,8,9]
列表推导式中的列表推导式也是非常有效的:
[[x for x in tup] for tup in some_tuples]#[[1,2,3],[4,5,6],[7,8,9]]
创建一个包含列表的列表