概述
1、基本的推导式
(1)列表推导式是python最受欢迎的功能之一,利用它可以非常高效的构造新的列表:只需一条简洁的代码,即可对于族元素进行过滤,并对得到的元素执行变形,基本的语法结构如下:
[exp for val in collection if condition] #列表推导式
上面的代码相当于下面这段循环:
result = []
...: for val in collection:
...: if condition:
...: result.append(val)
过滤器的条件可以省略,只留下表达式。如下面给定的字符串列表,过滤掉长度小于2的字符串,并将字符串转换为大写的形式:
In [8]: strs = ['py', 'tuple', 'list', 'python','p', 'Pip']
In [9]: [str.upper() for str in strs if len(str)>2]
Out[9]: ['TUPLE', 'LIST', 'PYTHON', 'PIP']
(2)集合和字典的推导式是这种思想的一种自然延续,他们语法差不多,产生的结果分别是集合和字段。字典推导式的语法形式如下:
dict_comp = {key-expr: value-expr for value in collection if condition}
集合推导式与列表推导式非常相似,唯一区别在于它使用的是大括号(花括号)而不是中括号(方括号),如下:
set_comp = {expr for value in collection if condition}
下面看集合推导式和字典推导式的示例:
In [11]: strs = ['py', 'tuple', 'list', 'python','p', 'Pip']
In [12]: {len(str) for str in strs}
Out[12]: {1, 2, 3, 4, 5, 6}
In [13]: #字段推导式
In [14]: loc_mapping = {value:idx for idx, value in enumerate(strs)}
In [15]: loc_mapping
Out[15]: {'Pip': 5, 'list': 2, 'p': 4, 'py': 0, 'python': 3, 'tuple': 1}
对于字典推导式,还有另一种方式:
In [16]: loc_mapping2 = dict((value,idx) for idx, value in enumerate(strs))
In [17]: loc_mapping2
Out[17]: {'Pip': 5, 'list': 2, 'p': 4, 'py': 0, 'python': 3, 'tuple': 1}
2、 嵌套列表的推导式
先看下面这个示例:
In [18]: name_all = [['qqing','wqing','qinggo','ewv','wqc'],['list','listqq','tep','sdk','pqrst']]
In [21]: qqs=[]
In [22]: for name in name_all:
...: qq=[n for n in name if n.count('q')>=2]
...: qqs.extend(qq)
...:
In [23]: qqs
Out[23]: ['qqing', 'listqq']
再看嵌套列表的推导式使用一种更简洁的方式实现:
In [25]: qqs2=[n for name in name_all for n in name if n.count('q')>=2]
In [26]: qqs2
Out[26]: ['qqing', 'listqq']
咋一看,嵌套列表的推导式不好,实际上推导式中for的部分是按照嵌套顺序排列的,而过滤条件还是跟之前一样放在后面的。下面是另一个示例,将一个字符串元组构成的列表“扁平化”为一个简单的字符串列表:
In [27]: lstr = [('java', 'python', 'c++'), ('for', 'while' ,'do...while'), ('in', 'isnull', 'not null')]
In [28]: result = [x for tu in lstr for x in tu]
In [29]: result
Out[29]:
['java',
'python',
'c++',
'for',
'while',
'do...while',
'in',
'isnull',
'not null']
更容易理解记忆的方式是:嵌套for循环中各个for的顺序是怎样的,嵌套推导式中各个for表达式的顺序就是怎样的!
同时应注意,上述示例中的语法与“列表推导式中的列表推导式”是不一样的,如下面的示例语法也是正确的,但结果却不同:
In [30]: result2 = [[x for x in tu] for tu in lstr]
In [31]: result2
Out[31]:
[['java', 'python', 'c++'],
['for', 'while', 'do...while'],
['in', 'isnull', 'not null']]
最后
以上就是坚定母鸡为你收集整理的python列表、集合以及字典的推导式的全部内容,希望文章能够帮你解决python列表、集合以及字典的推导式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复