Python的学习笔记--高级特性
数组的切片
定义一个数组
1 | arr=list(range(100)) |
数组取前3个元素
arr[0:3]
,0可以省略,arr[:3]
,打印结果:[0,1,2]
数组取后面三个元素:
arr[-3:0]
,也可写为:arr[-3:]
,打印结果:[97,98,99]
- 数组取后面三个元素:
arr[97:]
,是跳过前97个数字,打印结果:[97,98,99]
可以指定取值的间隔
arr[:10:2]
,打印结果:[0, 2, 4, 6, 8]
如果在全部范围内查询,可以省略查询的个数,arr[::2]
这样打印出来所有的偶数。切片的方法同样适用于
tuple
字符串可以看成是字符的数组,可以使用,
"ABCDEFG"[:3]
输出结果ABC
迭代循环
list
的循环1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24arr=list(range(10))
for a in arr:
print(a)
```
2. `dict`循环
```python
dict={"a":1,"b":2,"c":3}
for a in dict:
print(a)
```
```python
dict={"a":1,"b":2,"c":3}
for x,y in dict.items():
print(x,y)
```
``` cte
a 1
b 2
c 3字符串循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15for a in "ABCD":
print(a)
```
4. 多个变量
```python
for x, y in [(1, 1), (2, 4), (3, 9)]:
print(x, y)
```
打印结果:
``` cte
1 1
2 4
3 9带索引的循环写法
1
2
3
4
5
6
7
8
9
10for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
```
打印结果:
```cte
0 A
1 B
2 C判断能否被迭代
1
2
3from collections import Iterable
isinstance('abc', Iterable)
列表生成式
列表生成式可以更简单的把生成一个list
或者tuple
.
定义一个100的数组,arr=list(range(100))
定义一个100偶数的数组
1
2
3
4arr=[2 * x for x in list(range(100))]
或者arr=[x for x in list(range(200)) if x%2==0]打印结果:
[0,2,4...198]
定义两个循环生成一个组合
1
str=[a+b for a in "ABC" for b in "XYZ"]
打印结果:
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
使用多个变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35dict = {'a': 'A', 'b': 'B', 'c': 'C' }
dic=[k + '=' + v for k, v in dict.items()]
print(dic)
```
打印结果:`['a=A', 'b=B', 'c=C']`
4. 使用函数
``` python
arr=[x.upper() for x in "abc"]
print(arr)
```
打印结果:`['A', 'B', 'C']`
获得当前路径,可以用一句代码
```python
import os
fs=[d for d in os.listdir('.')]
print(fs)
```
5. 表达式可以赋值给一个变量,实现延迟加载
``` python
g = (2 * x for x in range(10))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
打印结果:
0,2,4,6,8
也可以使用循环打印:
1
2
3g = (2 * x for x in range(10))
for x in g:
print(x)