序言
python的列表对象是这个语言提供的最通用的序列,列表是一个任意类型的对象的位置相关的有序集合,它没有固定的大小。不像字符串,其大小是可变的,通过对偏移量进行赋值以及其他各种列表的方法进行调用,确实能够修改列表的大小。列表的形式如下
>>
>
A
=
[
'apple'
,
1
,
[
1
,
2
,
'peach'
]
,
2
]
列表可以包含多种元素,可以进行嵌套,带有多种方法(具体的方法,可以查看相关手册),通过这些方法,列表可以有很多功能,例如可以当做栈,队列(低效,一般不用)等,下面我们主要介绍 列表推导式 的使用。
主体内容
列表推导式提供了一个更简单的创建列表的方法。常见的用法是把某种操作应用于序列或可迭代对象的每个元素上,然后使用其结果来创建列表,或者通过满足某些特定条件元素来创建子序列
例如,我们通常创建一个列表,是这样的姿势
>>
>
squares
=
[
]
>>
>
for
x
in
range
(
10
)
:
.
.
.
squares
.
append
(
x
**
2
)
.
.
.
>>
>
squares
[
0
,
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
但是,我们也可以这样创建
squares
=
[
x
**
2
for
x
in
range
(
10
)
]
它们的结果是一样的,但第二种方法更加简洁易读。
列表推导式
的结构是由
一对方括号
所包含的以下内容:
一个表达式,后面跟一个 for 子句,然后是零个或多个 for 或 if 子句
。 其结果将是一个新列表,由对表达式依据后面的 for 和 if 子句的内容进行求值计算而得出。例如下面的例子。
>>
>
[
(
x
,
y
)
for
x
in
[
1
,
2
,
3
]
for
y
in
[
3
,
1
,
4
]
if
x
!=
y
]
[
(
1
,
3
)
,
(
1
,
4
)
,
(
2
,
3
)
,
(
2
,
1
)
,
(
2
,
4
)
,
(
3
,
1
)
,
(
3
,
4
)
]
它等价于
>>
>
combs
=
[
]
>>
>
for
x
in
[
1
,
2
,
3
]
:
.
.
.
for
y
in
[
3
,
1
,
4
]
:
.
.
.
if
x
!=
y
:
.
.
.
combs
.
append
(
(
x
,
y
)
)
.
.
.
>>
>
combs
[
(
1
,
3
)
,
(
1
,
4
)
,
(
2
,
3
)
,
(
2
,
1
)
,
(
2
,
4
)
,
(
3
,
1
)
,
(
3
,
4
)
]
列表推导式可以使用复杂的表达式和嵌套函数
>>
>
from
math
import
pi
>>
>
[
str
(
round
(
pi
,
i
)
)
for
i
in
range
(
1
,
6
)
]
[
'3.1'
,
'3.14'
,
'3.142'
,
'3.1416'
,
'3.14159'
]
列表推导式也支持嵌套,如下代码所示
>>
>
matrix
=
[
.
.
.
[
1
,
2
,
3
,
4
]
,
.
.
.
[
5
,
6
,
7
,
8
]
,
.
.
.
[
9
,
10
,
11
,
12
]
,
.
.
.
]
下面的列表推导式将交换其行和列
>>
>
[
[
row
[
i
]
for
row
in
matrix
]
for
i
in
range
(
4
)
]
[
[
1
,
5
,
9
]
,
[
2
,
6
,
10
]
,
[
3
,
7
,
11
]
,
[
4
,
8
,
12
]
]