5.数据结构

5.1简介

在计算机程序中会有很多数据,这些数据也需要一个容器将他们管理起来,这就是数据结构。常见的数据结构:数组(Array)、集合(Set)、列表(List)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和字典(Dictionary)等结构。
Python中数据容器主要有:序列、集合和字典。
注:Python中并没有数组结构,因为数组要求元素类型是一致的。而Python作为动态类型语言,不强制声明变量的数据类型,也不能强制检查元素的数据类型。所以Python中没有数组结构

5.2序列


序列(sequence)是一种可迭代的,元素是有序的,可以重复出现的数据结构。序列可以通过索引访问元素。
序列包括的结构有:列表(list)、字符串(str)、元组(tuple)、范围(range)、和字节序列(bytes)。序列可进行的操作有:索引、分片、加和乘。

5.2.1序列操作
5.2.1.1索引操作

序列中第一个元素的索引是0,其他元素的索引是第一个元素的偏移量。可以有正偏移量,称为正值索引;也可以有负偏移量,称为负值索引。正值索引最后一个元素索引是“序列长度-1”,负值索引最后一个元素索引是“-1”
注:关于负索引略有不同

s = 'Genius'
print('长度为'+str(len(s)))
print(type(s[0]))
print(s[0])
print(s[-1])
print(max(s)) #最后一个值
print(min(s)) #第一个值

#输出
长度为6
<class 'str'>
G
s
u
G
[Finished in 0.2s]
5.2.1.2序列的加和乘

前面介绍过了,不说了

5.2.1.3序列分片

序列的分片(Slicing)就是从序列中切分出小的子序列。分片使用分片运算符,分片运算符有两种形式:

  • [start:end]。start是开始索引,end是结束索引。
  • [start:end:step]。start是开始索引,end是结束索引,step是步长,步长是在分片时获取元素的间隔。步长可以为正整数,也可为负整数。
    注:切下的分片包括start位置元素,但不包括end位置元素,start和end都可以省略。
s = 'Genius'
print('长度为'+str(len(s)))
print(s[0:6]) #s索引为0-5 即为[start,end)
print(s[:6])
print(s[0:-1])
print(s[0:])

print(s[0:6:2])
print('-------------------------')
print(s[0:-1:-2]) #显然不存在
print('-------------------------')
print(s[0:-1:2])
print(s[::-1])

#输出
长度为6
Genius
Genius
Geniu
Genius
Gnu
-------------------------

-------------------------
Gnu
suineG
[Finished in 1.2s]

可能仍有所不解,确实正负夹杂确实也把问题扯复杂了,可以看看这篇Python中切片的理解


5.2.2元组

元组(tuple)是一种序列(sequence)结构。

5.2.2.1创建元组

元组(tuple)是一种不可变序列,一旦创建就不能修改。创建元组可以使用tuple([iterable])函数或者直接用逗号(,)将元素分隔。

s1 = 21,22,23,24
print(type(s1))
# 创建元组时使用小括号把元素包裹起来不是必须的
print(s1)
print('------------------')
s2 = (21,22,23,24)
print(type(s2))
# 使用括号将元素包裹起来,这只是为了提高程序的可读性
print(s2)
print('------------------')
s3 =('abc',123,s1,'sub',s2,123,'Genius')
# 可迭代
print(type(s3))
print(s3)
print('------------------')
s4 =tuple([1,2,3,4])
# 元组还有通过tuple([iterable])函数创建,参数iterable是任何可迭代对象。
# 使用tuple()函数创建元组对象,实参是一个列表,列表是可迭代对象
print(type(s4))
print(s4)
print('------------------')

# 输出
<class 'tuple'>
(21, 22, 23, 24)
------------------
<class 'tuple'>
(21, 22, 23, 24)
------------------
<class 'tuple'>
('abc', 123, (21, 22, 23, 24), 'sub', (21, 22, 23, 24), 123, 'Genius')
------------------
<class 'tuple'>
(1, 2, 3, 4)
------------------
[Finished in 0.2s]

注:如果一个元组只有一个元素时,后面的逗号不能省略,即(21,)表示的是只有一个元素的元组,而(21)表示的是一个整数。另外,()可以创建空元组。

s1 = ()
print(type(s1))
print(s1)
print('-----------------')
s2 = (21)
print(type(s2))
print(s2)
print('-----------------')
s3 = (21,)
print(type(s3))
print(s3)

#输出
<class 'tuple'>
()
-----------------
<class 'int'>
21
-----------------
<class 'tuple'>
(21,)
[Finished in 0.3s]
5.2.2.2访问元组

元组做为序列可以通过下标索引访问元素,也可以对其进行分片。

s1 = 21,22,23,24
s2 = (21,22,23,24)
s3 =('abc',123,s1,'sub',s2,123,'Genius')
print(s3[1:3])

#输出
(123, (21, 22, 23, 24))
[Finished in 0.2s]

元组还可以进行拆包(Unpack)操作,就是将元组的元素取出赋值给不同变量。

s1 = 21,22,23,24
s2 = (21,22,23,24)
s3 =('abc',123,s1,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值