Python之数据结构

目录

1.通用序列操作

1.1 索引

1.2切片

1.3序列相加

1.4 序列重复

1.5 成员资格

2.列表

2.1 列表更新

2.2 增加元素

2.3 删除元素

2.4 查找元素

2.5 队列的其他操作

3.元组

3.1 元组定义

3.2 删除元组

3.3 元组的其他操作

4.字典

4.1 字典定义

4.2使用字典

4.3 字典的其他操作


1.通用序列操作

1.1 索引

序列的每个元素都分配了一个数字,代表了它在序列中的位置。

Python中的索引从“0”开始,第一个是“0”,第二个是“1”,以此类推。

x = [1,2,3,4]

print(x[0])
print(x[1])

执行结果如下:

1
2

索引不仅可以从左往右编号,也可以从右往左编号。

x = [1,2,3,4]

print(x[-1])
print(x[-3])

执行结果如下:

4
2

1.2切片

Python中所有的数据类型都可以进行切片操作。

# 列表
x = [1,2,3,4,5,6]

print(x[0:3])
print(x[1:3])

# 元组
x2 = (1,2,3,4,5,6)

print(x2[0:3])
print(x2[1:3])

#字符串
x3 = "123456"

print(x3[0:3])
print(x3[1:3])

执行结果如下:

[1,2,3]
[2,3]

(1,2,3)
(2,3)

123
23

从结果可以看出切片操作实现需要提供两个索引作为边界,第一个元素包含在切片内,第二个元素不包含在内。类似于数学区间[a,b)。

同时,切片也支持负数,即从右往左顺序索引获取切片。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]

print (x1[-3:3])

# 元组
x2 = (1,2,3,4)

print (x2[-3:3])

# 字符串
x3 = "1234"

print (x3[-3:3])

执行结果如下:

[2, 3]
(2, 3)
23

序列的索引下标可以超出其真实的索引长度。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]

print (x1[1:10])

# 元组
x2 = (1,2,3,4)

print (x2[1:10])

# 字符串
x3 = "1234"

print (x3[1:10])

执行结果如下:

[2, 3, 4]
(2, 3, 4)
234

所有的索引的切片都有个默认的参数“a”,“b”。“a”的默认值为0,“b”的默认值为最后一个元素

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]

print (x1[3:])
print (x1[:3])
# 元组
x2 = (1,2,3,4)

print (x2[3:])
print (x2[:3])

# 字符串
x3 = "1234"

print (x3[3:])
print (x3[:3])

执行结果如下:

[4]
[1, 2, 3]
(4,)
(1, 2, 3)
4
123

如果切片的两个索引都设置为空,则获取整个序列。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4]

print (x1[:])

# 元组
x2 = (1,2,3,4)

print (x2[:])


# 字符串
x3 = "1234"

print (x3[:])

执行结果如下:

[1, 2, 3, 4]
(1, 2, 3, 4)
1234

根据起始位置和结束位置来获取任意的序列,不过这种序列都是连续的,也可以获取非连续的序列,Python的切片提供了第三个参数:步长。默认情况下为1。如果设置步长为2,得到的序列是从开始到结束每隔“1”个元素的序列。步长的参数不支持“0”。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5,6]


print (x1[::1])
print (x1[::2])
print (x1[::0])

执行结果如下:

[1, 2, 3, 4, 5, 6]
[1, 3, 5]
Traceback (most recent call last):
  File "F:/PYthon/test.py", line 8, in <module>
    print (x1[::0])
ValueError: slice step cannot be zero

当负数作为步长时,Python会从序列的尾部开始向左获取元素,直到第一个元素为止。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5,6]


print (x1[::-1])
print (x1[::-2])

执行结果如下:

[6, 5, 4, 3, 2, 1]
[6, 4, 2]

1.3序列相加

序列之间可以使用“+”进行连接操作。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,]+[5,6,7,8]
print (x1)

执行结果如下:

[1, 2, 3, 4, 5, 6, 7, 8]

不同类型的序列不可以做连接。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,]+(5,6,7,8)
print (x1)


执行结果如下:

TypeError: can only concatenate list (not "tuple") to list

1.4 序列重复

序列之间可以用“*”做乘法。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,] * 3
print (x1)


执行结果如下:

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

1.5 成员资格

成员资格是指判断一个元素是否包含在序列中,Python用运算符“in”来判断。“in”运算符会判断左边的元素是否包含在右边的序列中,如果包含则返回ture,反之,返回false。

# -*- coding: UTF-8 -*-
# 列表
x1 = [1,2,3,4,5]

print (3 in x1)
print (9 in x1)


执行结果如下:

True
False

注意:只有当元素的类型和值都完全一致,才算包含在序列中,比如数字5和字符串“5”就是两种不同的元素。

# -*- coding: UTF-8 -*-

print (5 in "123456")

执行结果如下:

TypeError: 'in <string>' requires string as left operand, not int

Python解释器要求如果“in”操作符右边是字符串,那么左边也必须是字符串。

1.6 长度,最小值,最大值和求和。

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

# 列表
x1 = [1,2,3,4,5,6]

print ("列表长度",len(x1))
print ("列表最小值",min(x1))
print ("列表最大值",max(x1))
print ("列表元素和",sum(x1))

#元组
x2 = (1,2,3,4,5,6)
print ("列表长度",len(x2))
print ("列表最小值",min(x2))
print ("列表最大值",max(x2))
print ("列表元素和",sum(x2))

#字符串
x3 = "123456"
print ("列表长度",len(x3))
print ("列表最小值",min(x3))
print ("列表最大值",max(x3))
print ("列表元素和",sum(x3))




执行结果如下:

Traceback (most recent call last):
  File "F:/PYthon/test.py", line 24, in <module>
    print ("列表元素和",sum(x3))
TypeError: unsupported operand type(s) for +: 'int' and 'str'

列表长度 6
列表最小值 1
列表最大值 6
列表元素和 21

列表长度 6
列表最小值 1
列表最大值 6
列表元素和 21

列表长度 6
列表最小值 1
列表最大值 6

注意:sum函数求和要求的是序列的元素必须都是"int",由于字符串序列的元素都是字符串,所以sum函数无法对字符串序列求和。

2.列表

2.1 列表更新

列表可以通过索引获取其中的单个元素,也可以通过索引更新其中的元素,使用方法就和变量赋值一样。

# -*- coding: utf-8 -*-

x = [1,2,3,4,5,6]

x[0]=2

print (x)

执行结果如下:

[2, 2, 3, 4, 5, 6]

更新的索引必须是已经存在的索引,不能超出列表长度。

# -*- coding: utf-8 -*-

x = [1,2,3,4,5,6]

x[10]=2

print (x)

执行结果如下:

IndexError: list assignment index out of range

Python解释器会提示我们索引超出列表范围。

2.2 增加元素

列表不能通过索引来添加元素,索引只能修改现有的元素,使用append方法在列表最后添加新元素,append每次只能够增加一个元素,想要增加多个元素,使用extend方法。

# -*- coding: utf-8 -*-

x = [1,2,3,4,5,6]

x.append(7)
print (x)

x.extend([8,9])
print (x)

执行结果如下:

[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

append和extend都只能在列表最后添加元素。

insert方法可以在中间插入元素。一次只能够插入一个元素。(也可以在最后添加元素)

# -*- coding: utf-8 -*-

x = [1,2,3,4,5,6]

x.insert(2,3)

print (x)

执行结果如下:

[1, 2, 3, 3, 4, 5, 6]

insert方法需要两个参数,第一个参数表示要插入元素的位置,第二个表示的是要插入元素的值。

2.3 删除元素

1.pop函数可以删除列表的一个元素,默认是最后一个,也可以指定位置。

# -*- coding: utf-8 -*-

x = [1,2,3,4,5,6]

#默认位置
x.pop()
print (x)

#指定位置
x.pop(1)
print (x)

执行结果如下:

[1, 2, 3, 4, 5]
[1, 3, 4, 5]

2.remove函数可以根据内容来删除元素。

remove函数会删除查找到的第一个元素,并且没有返回值。

# -*- coding: utf-8 -*-

x = [1,2,3,4,4,6]

x.remove (4)
print (x)

执行结果如下:

[1, 2, 3, 4, 6]

3.del也可以用来删除列表元素。

del后边指定的是列表的元素和索引。

# -*- coding: utf-8 -*-

x = ["A","B","C","D","E","F","G"]

del x[2]
print (x)

执行结果如下:

['A', 'B', 'D', 'E', 'F', 'G']

2.4 查找元素

index方法用于查找元素在列表中的索引位置。如果查找的元素不在列表,就会报错。

# -*- coding: utf-8 -*-

x = ["A","B","C","D","E","F","G"]

#元素在列表中
print (x.index("A"))

#元素不在列表中
print (x.index("H"))

执行结果如下:

ValueError: 'H' is not in list
0

2.5 队列的其他操作

1.reverse方法可以反转队形。

和[::-1]类似,但是reverse方法修改的是原来的队列,并且没有返回值。

# -*- coding: utf-8 -*-

x = ["A","B","C","D","E","F","G"]

x.reverse()

print (x)

执行结果如下:

['G', 'F', 'E', 'D', 'C', 'B', 'A']

2.count方法用来统计列表中一个元素出现的次数。

# -*- coding: utf-8 -*-

x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]

x.count(5)

print (x.count(5))

执行结果如下:

5

3.sort方法用于对列表进行排序。

# -*- coding: utf-8 -*-

x = [1,2,1,5,2,6,5,5,2,6,6,5,5,2,3,6]

x.sort()

print (x)

执行结果如下:

[1, 1, 2, 2, 2, 2, 3, 5, 5, 5, 5, 5, 6, 6, 6, 6]

3.元组

3.1 元组定义

定义元组时只需要用()把元素括起来,每个元素中间用“,”隔开。

如果只有一个元素,后边必须带“,”。否则,不能够定义为元组。

# -*- coding: utf-8 -*-

x = (1,2,3,4,5)
print (x)
print (type(x))

#不带“,”
y = (1)
print (y)
print (type(y))

#带“,”
z = (1,)
print (z)
print (type(z))

执行结果如下:

(1, 2, 3, 4, 5)
<type 'tuple'>
1
<type 'int'>
(1,)
<type 'tuple'>

3.2 删除元组

元组不能够修改,也不能单独的删除元组的某个元素,只能删除整个元组。

# -*- coding: utf-8 -*-

x = (1,2,3,4,5)

del x
print (x)

执行结果如下:

NameError: name 'x' is not defined

这个提示说明变量“x”没有被定义,而我们成功删除了元组x。

3.3 元组的其他操作

1.count方法和列表一样,可以统计某个元素在一个元组中出现的次数。

# -*- coding: utf-8 -*-

x = (1,2,3,4,5,5,4,1,4,5,2,3,6,8)

print (x.count(2))

执行结果如下:

2

2.index方法跟列表中的一样,可以查找某个元素在元组中的索引位置。

# -*- coding: utf-8 -*-

x = (1,2,3,4,5)

print (x.index(3))

执行结果如下:

2

4.字典

4.1 字典定义

字典类型和它的名字一样,可以像查字典一样去查找。其他语言也有类似的类型,如PHP的Array,Java中的HashMap。

# -*- coding: utf-8 -*-

zd = {
    "I":"我",
    "YOU":"你",
    "HE":"他",
    "SHE":"她",
}

print (zd,type(zd))

执行结果如下:

{"I": "我", "YOU": "你", "HE": "他", "SHE": "她"}

字典的元素都是成对出现的,(","的左边成为键,右边成为值),元素和元素之间由“,”构成。字典的键必须是唯一的,如果是空字典,可以直接使用{}。

4.2使用字典

在Python中,字典其实就是一组键值对。字典和列表都是可修改结构,对字典的修改和列表类似。

# -*- coding: utf-8 -*-
zd = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}
zd["HE"] = "他们"
print (zd)

执行结果如下:

{"I": "我", "YOU": "你", "HE": "他们", "SHE": "她"}

删除字典中的元素

# -*- coding: utf-8 -*-
zd = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

del zd["HE"]
print (zd)

执行结果如下:

{"I": "我", "YOU": "你", "SHE": "她"}

4.3 字典的其他操作

1.clear可以用于清空字典的所有元素。

# -*- coding: utf-8 -*-
zd = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

zd.clear()
print (zd)

执行结果如下:

{}

2.使用copy方法完整的复制了新的副本。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

zd2 = zd1.copy()
print (zd1)

del zd2["SHE"]
print (zd2)

执行结果如下:

{'I': '我', 'YOU': '你', 'HE': '他们', 'SHE': '她'}
{'I': '我', 'YOU': '你', 'HE': '他们'}

使用copy对获取到的字典做修改,原字典不受影响。

3.fromkeys方法用于创建一个新字典,用序列中的元素作为键,第二个参数为字典所有参数对应的初始值。

# -*- coding: utf-8 -*-
seq =("red","black","blue")

#不指定默认值
color1 = dict.fromkeys(seq)
print (color1)

#指定默认值
color2 = dict.fromkeys(seq,6)
print (color2)
{'red': None,'black': None,'blue': None}
{'red': 6,'black': 6,'blue': 6}

4.使用get方法返回键对应的值,如果字典不存在对应的键值则返回默认值。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

print (zd1.get("HE"))

print (zd1.get("IT"))

print (zd1.get("IT","未知"))

执行结果如下:

HE : 他
IT : None
IT : 未知

5.使用keys方法返回一个列表,里面包含了字典的所有键。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

print(zd1.keys())

执行结果如下:

dict_keys(['I', 'YOU', 'HE', 'SHE'])

6.使用values方法返回一个列表,里边包含了字典的所有值。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

print(zd1.values())

执行结果如下:

dict_values(['我', '你', '他', '她'])

7.使用items方法返回一个列表,里边包含了所有键的列表和所有值的列表。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

print(zd1.items())

执行结果如下:

dict_items([('I': '我'), ('YOU': '你'),('HE': '他'),('SHE': '她')])

由于字典不能直接应用于for循环,可以使用items方法来遍历字典。

# -*- coding: utf-8 -*-
zd1 = {
    "I": "我",
    "YOU": "你",
    "HE": "他",
    "SHE": "她",
}

for k ,v in zd1.items():
    print(k, "=>",v)

执行结果如下:

I => 我
YOU => 你
HE => 他
SHE => 她

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲折上升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值