## 切片操作
python的切片操作是用来访问可迭代对象的,包括字符串和数组,列表等。
我们以数组为例进行介绍
```python
a = [1, 2, 3, 4, 5]
# 访问数组的前3个元素
a[0:3]
```
[1, 2, 3]
可以看到我们采用a[0:3]的方法很容易的访问到了数组的前三个元素。
对于具有序列结构的数据来说,切片操作的方法是:consequence[start_index: end_index: step]。
start_index:表示是第一个元素对象,正索引位置默认为0;负索引位置默认为 -len(consequence)
end_index:表示是最后一个元素对象,正索引位置默认为 len(consequence)-1;负索引位置默认为 -1。
step:表示取值的步长,默认为1,步长值不能为0。
```python
print(a[-2])
```
4
```python
a[0::2] # 从第0个元素开始,每隔两个元素取一个元素
```
[1, 3, 5]
```python
a[-4 : 3] # 从倒数第四个元素到正数第三个元素
```
[2, 3]
```python
a[-4 : -2] # 从倒数第四个元素到正数第四个元素
```
[2, 3]
可以看到从杨是从
# 利用步长对序列进行倒序取值
在切片运算中,步长为正,表示从左至右,按照索引值与起始位置索引之差可以被步长整除的规律取值;当步长为负,则表示从右至左,按照按照索引值与起始位置索引之差可以被步长整除的规律取值。
根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比reverse方法更方便,且适用于没有reverse方法的字符串和元组。
```python
print(a[::-1])
```
[5, 4, 3, 2, 1]
```python
a[::-2] # 从最后一个元素开始,每两个元素取一个
```
[5, 3, 1]
# 列表生成式
列表生成式是python中非常好用的一个语法糖,很多时候可以大大的简化代码,让代码更加容易阅读和理解。是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
```python
list(range(1, 11))
```
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:
```python
demolist = []
for x in range(1, 11):
demolist.append(x * x)
demolist
```
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
```python
[x * x for x in range(1, 11)]
```
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
```python
[x * x for x in range(1, 11) if x % 2 == 0]
```
[4, 16, 36, 64, 100]
还可以使用两层循环,可以生成全排列:
```python
[m + n for m in 'ABC' for n in 'XYZ']
```
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
在涉及到列表操作的时候,列表生成式是非常方便的,举个简单的例子,举个例子我们要找出1到100中所有3的倍数:
```python
L = []
for x in range(100):
if x % 3 == 0:
L.append(x)
print(L)
```
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
```python
# 而如果用列表生成式就简单多了
print([x for x in range(100) if x % 3 == 0])
# 代码的可读性高,只要一行代码就能够完成四行代码的工作
# 在比如找出100以内所有3或者7的倍数
print([x for x in range(100) if x % 3 == 0 or x % 7 == 0])
```
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
[0, 3, 6, 7, 9, 12, 14, 15, 18, 21, 24, 27, 28, 30, 33, 35, 36, 39, 42, 45, 48, 49, 51, 54, 56, 57, 60, 63, 66, 69, 70, 72, 75, 77, 78, 81, 84, 87, 90, 91, 93, 96, 98, 99]
绝大部分用到循环的地方,都可以用列表生成式来简化代码,列表生成式是python中非常强大的工鞥呢。