python列表、集合以及字典的推导式
2018-03-25 15:49
603 查看
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]
I
c8ab
n [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']]
(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]
I
c8ab
n [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数据处理之列表、集合、字典推导式
- python中列表,元祖,字典,集合区别和使用方法
- Python 入门学习 -----变量及基础类型(元组,列表,字典,集合)
- python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体
- Python元祖,列表,字典,集合的比较
- python列表推导式和集合
- python学习——Python中的列表推导式、字典推导式、集合推导式
- 【python】练习题:去重排序以及列表推导式
- python中列表,元祖,字典,集合的区别
- python之列表、元祖、集合、字典基础篇
- python 生成器、列表/字典/集合解析式区别
- Python中几个容易混淆的概念:列表、元组、字典、集合
- python基础学习——列表(list), 元祖(tuple), 字典(dict), 字符串(string), 集合(set) 介绍及相互转换
- 兄弟连学python(4)——列表、元祖、字典、集合数据类型介绍
- python中列表 元组 字典 集合的区别
- python学习笔记二 列表、字典、集合
- 【Python】基础学习——列表(list),元祖(tuple),字典(dict),字符串(string),集合(set)
- Python基础二——列表,元组,字典,集合
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器