首页 > 代码库 > 【Python】09、线性结构与切片

【Python】09、线性结构与切片


一、线性结构

    list、tuple、str、bytes、bytearray,range()

    都是顺序存储、顺序访问的、都是可迭代对象、都可以通过索引访问;被称为线性结构

    可使用len()获取长度、可以切片,可以使用iter()将可迭代对象转换为迭代器

In [16]: r = range(8)

In [17]: r
Out[17]: range(0, 8)

In [18]: i = iter(range(8))

In [19]: i
Out[19]: <range_iterator at 0x7f2417b7e5d0>

In [20]: next(i)
Out[20]: 0

In [21]: next(i)
Out[21]: 1

In [23]: len(r)
Out[23]: 8

In [24]: l = ["a", 0, 1]

In [25]: i = iter(l)

In [26]: type(i)
Out[26]: list_iterator

In [27]: next(i)
Out[27]: ‘a‘

In [28]: next(i)
Out[28]: 0

In [29]: next(i)
Out[29]: 1

In [30]: next(i)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-30-bed2471d02c1> in <module>()
----> 1 next(i)

StopIteration:

      可迭代对象都可以用len获取长度,使用iter()转化成迭代器(iterator)


二、切片操作

      通过索引获取获取某个片段的值

格式:

      list[start:stop:step]    # 包含start不包含stop;返回一个新的list,不会对原list修改

In [1]: lst = list(range(5))

In [2]: lst
Out[2]: [0, 1, 2, 3, 4]

In [3]: lst[3]
Out[3]: 3

In [4]: lst[3:4]
Out[4]: [3]

In [6]: lst[1:5]
Out[6]: [1, 2, 3, 4]

In [7]: lst[1:5:2]
Out[7]: [1, 3]

In [8]: lst[1:5:6]
Out[8]: [1]

In [9]: lst[1:5:4]
Out[9]: [1]

In [10]: lst[1:5:3]
Out[10]: [1, 4]

In [11]: lst[1:5:-2]  
Out[11]: []



In [14]: lst[:]            
Out[14]: [0, 1, 2, 3, 4]

In [15]: lst[:3]
Out[15]: [0, 1, 2]

In [16]: lst[3:]
Out[16]: [3, 4]

In [17]: lst[::]           # star,stop,step都可以省略;默认为0,-0,1
Out[17]: [0, 1, 2, 3, 4]

In [18]: lst[::2]
Out[18]: [0, 2, 4]

In [19]: lst[::-2]  # 这时step可以使用负数
Out[19]: [4, 2, 0]

In [20]: lst[::-1]
Out[20]: [4, 3, 2, 1, 0]

In [21]: lst[1:5:-1]
Out[21]: []

In [22]: lst[:5:-1]
Out[22]: []

In [23]: lst[0::-1]
Out[23]: [0]

当start >= stop时,step为正时,返回空List;当step为负数时,反向

In [34]: lst[2:-1]  # -1索引实际上等于len(list) + index,还是大于stop
Out[34]: [2, 3]

In [38]: lst[1:5]
Out[38]: [1, 2, 3, 4]

In [39]: lst[1:5:-2]
Out[39]: []

In [40]: lst[5:1:-2]
Out[40]: [4, 2]


【Python】09、线性结构与切片