切片
list和tuple、字符串。
L[:]
L[1:4]
L[-1]
str[::2]
迭代
python的迭代:只要是可迭代对象都可以,和下标没关系。
判断一个对象是否是可迭代的,通过collections模块中的Iterable类型判断。
1
2
3
4
5
6
7
|
from
collections
import
Iterable
isinstance
(
'abc'
, Iterable)
isinstance
([
1
,
2
,
3
], Iterable)
isinstance
(
123
, Iterable)
-
-
false
|
对list实现下标循环,使用python的enumerate函数把list变成索引-元素对。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
for
i, value
in
enumerate
([
'a'
,
'b'
,
'c'
]):
print
(i, value)
0
a
1
b
2
c
# 同时引用两个变量
for
x, y
in
[(
1
,
1
), (
2
,
4
), (
3
,
9
)]:
print
(x, y)
1
1
2
4
3
9
|
列表生成式 -- List Comprehensions
用来创建list的生成式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
list
(
range
(
1
,
11
))
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
]
[x
*
x
for
x
in
range
(
1
,
11
)]
[
1
,
4
,
9
, ...]
# 列表生成式中的if判断,选出符合条件的
[x
*
x
for
x
in
range
(
1
,
11
)
if
x
%
2
=
=
0
]
[
4
,
16
,
36
,
64
,
100
]
[m
+
n
for
m
in
'abc'
for
n
in
'xyz'
]
[
'ax'
,
'ay'
,
'az'
,
'bx'
,
'by'
,
'bz'
,
'cx'
,
'cy'
,
'cz'
]
# 使用列表生成式,列出目录下的所有文件和目录
import
os
[d
for
d
in
os.listdir(
'.'
)]
# 列表生成式使用dict生成list
d
=
{
'x'
:
'a'
,
'y'
:
'b'
,
'z'
:
'c'
}
[k
+
'='
+
v
for
k, v
in
d.items()]
[
'y=b'
,
'x=a'
,
'z=c'
]
|
生成器 -- 解决列表生成式的内存溢出问题。
在循环过程中不断推算后续的元素,不必创建完整的list,节省内存。一边循环一边计算 -- 生成器 -- generator
正常的做法是:在创建了一个generator后,使用for来迭代。
定义generator的另一种方法:在函数定义中包含yield关键字。
1
2
3
4
5
6
7
|
def
fib(
max
):
n, a, b
=
0
,
0
,
1
while
n <
max
:
yield
b
a, b
=
b, a
+
b
n
=
n
+
1
return
'done'
|
该generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行从上次返回的yield语句继续执行。
本文转自ting2junshui51CTO博客,原文链接:http://blog.51cto.com/ting2junshui/1755266 ,如需转载请自行联系原作者