【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]
时间: 2024-12-30 04:49:09

【Python】09、线性结构与切片的相关文章

C++和python利用struct结构传输二进制数据实现

网络编程中经常会涉及到二进制数据传输的问题,在C++中常用的传输方式有文本字符串和结构体封包.如果能将要发送的数据事先放进连续的内存区,然后让send函数获取这片连续内存区的首地址就可以完成数据的发送了,文本字符串如char型数组,以字节为单位,在内存中是顺序存储的,所以可以直接用send函数发送.但是如果要同时发送多个不同类型的数据时,它们在内存中存储的地址是随机的,不是顺序存储的,而且它们之间的相对位置也无法确定,这样就需要一种数据组织方式来明确各数据之间的相对位置.结构体显然就是一种的数据

Python内置数据结构3

解构 In [8]: lst = [1,2] In [9]: lst Out[9]: [1, 2] In [10]: first,second = lst  #解构 In [11]: print(first,second) 1 2 按照元素顺序,把线性结构的元素赋值给变量 解构的变化 In [21]: lst = list(range(10)) In [22]: lst Out[22]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [23]: head,*mid,tail

chapter . 2.2、Python内置数据结构:字符串、字节和字节数组

字符串 有序的序列,是字符的集合 使用单引号,双引号,三引号引注的字符序列 字符串是不可变对象,我们看到的合并字符串,其实是返回一个由原来两个值复制后返回的值,会占用新的空间. 从python3起,字符串是Unicode类型 s1 = 'string' s2 = '''this's a "string''' s3 = r"hello \n aasdasd"    :r和R表示忽略转义 s4 = R'windows \net' sql = """s

Python封装和结构

在Python中有封装和解构的概念.封装 ——是将将多个值使用逗号分割,组合在一起 .本质上,返回一个元组,只是省掉了小括号.这是Python特有的概念,现在被很多语言借鉴. a = (1,2)#元组 b = 1,2#元组 print(type(a)) print(type(b)) 结果为: <class 'tuple'> <class 'tuple'> 解构是把线性结构(也可以是非线性结构)的元素解开,并顺序的赋给其它变量,应该注意的是左边接纳的变量数要和右边解开的元素个数一致.

数据结构和算法-数据结构-线性结构-栈和队列

 ################################################## """ 三.线性结构 (1)栈 1.定义:栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表. 2.栈的特点:后进先出(last-in,first-out),简称LTFO表 这种数据结构的特点: 就是像是杯子或者是弹夹,电梯, 存储的时候从底部开始,读取的时候从顶部开始,具备这种特点就是栈 就是后进先出, 存储的时候就可以从顺序表或者链表就可以实现, 只让从一

线性结构和非线性结构

线性结构和非线性结构同属于数据结构中的逻辑结构类型 线性结构是指该结构中的节点之间存在一对一的关系.其特点是开始节点和终端节点都是唯一的,除了开始节点和终端节点外,其余节点都有且仅有一个直接前驱,有且仅有一个直接后继.此类型的存储结构有:顺序表(数组).链表.堆栈结构.队列结构等 非线性结构又包括集合.树形结构.图形结构或网状结构,特点是数据元素之间存在一个对多个或多个对多个的关系,其中集合是一种关系极为松散的结构.

查找算法--线性结构的查找方法

查找基本概念: 查找又称为检索,指从一批记录中找出满足指定条件的某一记录过程.在日常生活中比如通讯录查找,字典查找等经常使用查找方法:在程序设计中,查找在许多程序中需要占用很多时间,因此,一个好的查找方法可以提高程序的运行速度. 主关键字和次关键字: 在需要查找的数据结构中,每条记录一般包含多个数据域.查找条件一般是给定其中的一个或几个域的值,这些作为查找条件的域成为关键字(KEY),如果关键字可以唯一标示数据结构中的一条记录,则称此关键字(Primary Key):若关键字不能唯一区别各个不同

2、线性结构——数据结构【基础篇】

线性结构 线性结构的4大特点: 1.有一个结点只有前驱 2.有一个结点只有后继 3.其他结点既有一个前驱也有一个后继 4.在逻辑上相邻在物理上也相邻数据的逻辑关系叫做线性结构 线性结构的3大类型: 1.线性表--线性表是n个数据元素的有限序列 存储结构: 顺序存储对应一组操作:顺序表 链式存储对应一组操作:单向链表.双向链表.循环链表 2.栈--限定只在表的一端(表尾)进行插入和删除操作的线性表:允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),其这一端被固定了. 存储结构

poj 3666 Making the Grade (线性结构上的DP )

题意: 给定n个数,问你将他们修改成非增或非减序列的最小花费.最小花费的定义是 假设原数组为 a[1] a[2] a[3] .... a[n] 修改后数组为 b[1] b[2] b[3] .... b[n] 那么最小花费为|a[1]-b[1]|+|a[2]-b[2]|+| a[3] - b[3] |+.....| a[n] - b[n] |. 思路: 线性结构上的动态规划 定义状态d[i][j] 表示 前i-1个数字已经是最小花费 现在把第i个数修改成b[j] 修改完成后前i个数总共最少需要的花