Python自学记录——切片、迭代

在Python中,代码不是越多越好,而是越少越好;代码不是越复杂越好,而是逻辑越简单越好。基于这个思想,我们可以学习下Python的高级特性,它能减少代码量。Python中,代码越少,开发效率越高。

切片:

Python中取一个 list 或 tuple 中部分元素是很常见的操作,一般来讲,有两种笨方法,下面以取 list 前三个元素为例:

>>> L1=[1,2,3,4,5]
>>> [L1[0],L1[1],L1[2]]
[1,2,3]
>>> L2=[]
>>> for i in range(3):
...     L2.append(L2[i])
...
>>> L2
[1,2,3]

Python中的 切片 操作符能大大简化这样的写法,示例如下:

>>> L1[0:3]
[1,2,3]

解释一下,元素从索引0开始取,取到索引3停止,但不包括索引3。即索引0、1、2,共计3个元素,得到的结果仍是 list。

如果第一个索引是0的话,还可以省略掉,方法如下:

>>> L1[:3]
[1,2,3]

同理,取 list 第二个元素和第三个元素的写法如下:

>>> L1[1:3]
[2,3]

Python中同样也支持 倒数切面,倒数切片索引值从 -1 开始 ,示例如下:

>>> L1[-2:]
[4,5]
>>> L1[-2:-1]
[4]

以第二个执行语句为例,解释一下,元素从末尾开始取值,从索引-2开始,取到索引-1,但不包括-1,所以,只取到索引-2的一个元素,共计1个元素。

切片取值很灵活,比如,L1前四个元素每两个元素取一次,写法如下:

>>> L1[:4:2]
[1,3]

L1 中,所有元素每两个元素取一次:

>>> L1[::2]
[1,3,5]

甚至,只写切片符号的话,可以直接复制一个 list :

扫描二维码关注公众号,回复: 3498274 查看本文章
>>> L2 = L1[:]
>>> L2
[1,2,3,4,5]

其中,tuple 也是一种 list,也可使用切片方法,但操作的结果仍是 tuple,示例如下:

>>> (1,2,3,4,5)[:3]
(1,2,3)

在 Python 中,字符串也可执行切片操作,示例如下:

>>> 'ABCDEFG'[:3]
'ABC'

友情提示,小白的我开始把切片和切面思想弄混了。。基础不扎实。。下面简单说下我自己的理解:

切片 是针对列表取值时用的,如Python中 list、tuple的取值;而切面思想大体理解是 在一个整体项目中,切开一个口,把代码放进去,让它在项目运行时运行,不影响项目的正常运行,以Java为例,常见的例子有:过滤器,监听器,拦截器等。

迭代:

 一般情况下我们会用 for 循环来遍历 list 或 tuple 等,这种遍历的方式我们称为迭代。

迭代一般常用在有下表的对象上,但在没有下表的对象上也可以使用,以 dict 为例,示例如下:

>>> d = {'a':'1','b':'2','c':'3'}
>>> for key in d:
...     print(key)
...
a
b
c
>>> for value in d.values():
...     print(value)
...
1
2
3
>>> for key,value in d.items():
...     print(key,value)
...
a 1 
b 2 
c 3

字符串也是可以迭代的对象,示例如下:

>>> for x in 'ABCD':
...     print(x)
...
A
B
C
D

当我们使用 for 循环时,只要对象是可迭代对象,就可以对其使用 for 循环,有个方法可以判断 对象 是否是迭代对象,示例如下: 

>>> from collections import Iterable
>>> isinstance('abc',Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance(123,Iterable)
False

如上所示,整数不可迭代。

要想打印出 list 的 下标,可以用  enumerate ,示例如下:

>>> for i,x in enumerate([1,2,3]):
...     print(x)
...
0 1
1 2
2 3

上述例子中,循环定义了两个变量,这种写法在 Python 中很常见,一般可以这样写:

>>> for x,y in ([1,2],[3,4],[5.6]):
...     print(x,y)
...
1 2
3 4
5 6

本篇暂时就到这里了,教材网址:https://www.liaoxuefeng.com, 继续学习~~

猜你喜欢

转载自blog.csdn.net/qq_37647296/article/details/80984720
今日推荐