推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:
列表推导式字典推导式集合推导式嵌套列表推导式
NOTE: 字典和集合推导是最近才加入到Python的(Python 2.7 和Python 3.1以上版). 下面简要介绍下:
【列表推导式】
列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形
其基本格式如下:
[expr for value in collection if condition]
过滤条件可有可无,取决于实际应用,只留下表达式;相当于下面这段for循环:
1
2
3
4
|
result = []
for
value in collection:
if
condition:
result.append(expression)
|
1
2
3
4
|
>>> names = [
'Bob'
,
'Tom'
,
'alice'
,
'Jerry'
,
'Wendy'
,
'Smith'
]
>>> [name.upper()
for
name in names
if
len(name)>
3
]
[
'ALICE'
,
'JERRY'
,
'WENDY'
,
'SMITH'
]
|
字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。其基本格式如下:
{ key_expr: value_expr for value in collection if condition }
例1: 用字典推导式以字符串以及其长度建字典
1
2
3
4
5
6
|
>>> strings = [
'import'
,
'is'
,
'with'
,
'if'
,
'file'
,
'exception'
]
>>> D = {key: val
for
val,key in enumerate(strings)}
>>> D
{
'exception'
:
5
,
'is'
:
1
,
'file'
:
4
,
'import'
:
0
,
'with'
:
2
,
'if'
:
3
}
|
【集合推导式】
集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]。其基本格式如下:
{ expr for value in collection if condition }
例1: 用集合推导建字符串长度的集合
1
2
3
|
>>> strings = [
'a'
,
'is'
,
'with'
,
'if'
,
'file'
,
'exception'
]
>>> {len(s)
for
s in strings} #有长度相同的会只留一个,这在实际上也非常有用
set([
1
,
2
,
4
,
9
])
|
嵌套列表是指列表中嵌套列表,比如说:
1
2
3
|
>>> L = [[
1
,
2
,
3
],
[
4
,
5
,
6
],
[
7
,
8
,
9
]]
|
1
2
|
names = [[
'Tom'
,
'Billy'
,
'Jefferson'
,
'Andrew'
,
'Wesley'
,
'Steven'
,
'Joe'
],
[
'Alice'
,
'Jill'
,
'Ana'
,
'Wendy'
,
'Jennifer'
,
'Sherry'
,
'Eva'
]]
|
用for循环实现:
1
2
3
4
5
6
7
8
9
10
|
tmp = []
for
lst in names:
for
name in lst:
if
name.count(
'e'
) >=
2
:
tmp.append(name)
print tmp
#输出结果
>>>
[
'Jefferson'
,
'Wesley'
,
'Steven'
,
'Jennifer'
]
|
1
2
3
4
5
|
>>> names = [[
'Tom'
,
'Billy'
,
'Jefferson'
,
'Andrew'
,
'Wesley'
,
'Steven'
,
'Joe'
],
[
'Alice'
,
'Jill'
,
'Ana'
,
'Wendy'
,
'Jennifer'
,
'Sherry'
,
'Eva'
]]
>>> [name
for
lst in names
for
name in lst
if
name.count(
'e'
)>=
2
] #注意遍历顺序,这是实现的关键
[
'Jefferson'
,
'Wesley'
,
'Steven'
,
'Jennifer'
]
|