1、推导式
推导式是从一个或者多个迭代器快速简洁的创建数据结构的一种方法。可以将循环和条件判断相结合,从而避免语法冗长的代码。
2、列表推导式
常见的列表推导式有以下两种格式 [expression for item in iterable]
[expression for item in iterable if condition]
下面通过具体的代码举例说明列表推导式的应用
(1) 1-10 的所有整数的平方组成的列表
>>> power_list=[x*x
for x
in range(
1,
11)]
>>> power_list
[
1,
4,
9,
16,
25,
36,
49,
64,
81,
100]
>>>
(2) 1-10 的所有奇数组成的列表
>>> odd_list=[x
for x
in range(
1,
11)
if x%
2==
1]
>>> odd_list
[
1,
3,
5,
7,
9]
>>>
(3) 两个元组中各取一个元素生成的元组的列表
>>> a=(
1,
2)
>>> b=(
3,
4)
>>> a_b=[(na,nb)
for na
in a
for nb
in b]
>>> a_b
[(
1,
3), (
1,
4), (
2,
3), (
2,
4)]
>>>
(4) 两个字符串各取一个字符所组成的字符串列表
>>> str1=
'abc'
>>> str2=
'XYZ'
>>> [s1+s2
for s1
in str1
for s2
in str2]
[
'aX',
'aY',
'aZ',
'bX',
'bY',
'bZ',
'cX',
'cY',
'cZ']
>>>
3、字典推导式
字典推导式格式如下:
{key_expression : value_expression for expression in iterable}
示例代码
(1) 字符串中字符为键,出现次数为值
>>> s=
'letters'
>>> d={letter : s.count(letter)
for letter
in set(s)}
>>> d
{
'l':
1,
'e':
2,
't':
2,
'r':
1,
's':
1}
>>>
4、集合推导式
集合推导式该格式如下:
{expression for expression in iterable}
示例代码
(1) 1-20 能被3整除的数的集合
>>> m_
set={x
for x
in range(
1,
21)
if x%
3==
0}
>>> m_
set
{
3,
6,
9,
12,
15,
18}
>>>
5、生成器推导式
将列表推导式中的方括号换成圆括号就是生成器推导式,不是元组推导式,元组是没有推导式的。生成器推导式返回的是一个生成器对象。
示例代码
>>> number_thing=(number
for number
in range(
1,
11))
>>> number_thing
<generator
object <genexpr> at
0x00000287D48DFFC0>
>>>
type(number_thing)
<
class 'generator'>
>>> number_list =
list(number_thing)
>>> number_list
[
1,
2,
3,
4,
5,
6,
7,
8,
9,
10]
>>> try_again =
list(number_thing)
>>> try_again
[]
>>>
注意:生成器推导式只能迭代一次,再次迭代时会发现已经被擦除