数据结构——顺序表(python)

本文介绍了如何在Python中自定义顺序表类,包括创建、添加元素、查找、插入、删除以及遍历功能,并扩展至二维表的创建和计算平均值。
摘要由CSDN通过智能技术生成

 首先创建一个顺序表,我一直很少用python中的类,都是直接构造函数,或者是连函数都没有,之间用轮子,一直是一个初学者的状态,我也想自己从基础学起!!!

第一个类   顺序表。

class SequenceList:
    def __init__(self):
        self.SeqList = []

    def CreateSeqList(self):
        print("请输入数据后按回车键确认,若想结束请输入#")
        element = input("请输入元素: ")
        while element != '#':
            self.SeqList.append(element)
            element = input("请输入元素: ")

# 调用示例
seq_list = SequenceList()
seq_list.CreateSeqList()
print("顺序表内容:", seq_list.SeqList)

 查找表中的元素

    def FindElement(self):
        key=input("请输入您想查询的元素:")
        if key in self.SeqList:
            ipos = self.SeqList.index(key)#ipos index position 索引位置
            print("您查询的元素是第",ipos,"位:",key)
        else:
            print("未查询到相关元素")

# 调用示例
seq_list = SequenceList()
seq_list.CreateSeqList()
seq_list.FindElement()

插入数据

#方法1
 def InsertElement(self):
        ipos_user = int(input("请输入你想插入的位置: "))
        self.SeqList.append(None)  # 在末尾添加一个 None,以便后续向后移动元素
        if ipos_user > len(self.SeqList):
            print("超出索引范围,当前的索引范围是", len(self.SeqList))
            return
        element_user = input("请输入您想插入的要素: ")
        for i in range(len(self.SeqList) - 1, ipos_user, -1):
            self.SeqList[i] = self.SeqList[i - 1]  # 向后移动元素
        self.SeqList[ipos_user] = element_user

#方法2
    def InsertElement(self):
        ipos =int(input("请输入你想插入的位置: "))
        element = input("请输入您想插入的要素: ")
        self.SeqList.insert(ipos,element)

# 调用示例
seq_list = SequenceList()#初始化之后其实是打开一个空间,所以print(seq_list)得到的是一个地址
seq_list.CreateSeqList()
seq_list.InsertElement()
print(seq_list.SeqList)


删除指定位置中的元素

    def DeleteElement(self):
        ipos = int(input("请输入你想删除的位置: "))
        self.SeqList.remove(self.SeqList[ipos])
        #实现删除指定位置的元素的实质是元素位置的移动,可以将指定位置元素之前的元素后移,也可以将指定位置元素之后的元素前移。

    

# 调用示例
seq_list = SequenceList()#初始化之后其实是打开一个空间,所以print(seq_list)得到的是一个地址
seq_list.CreateSeqList()
seq_list.DeleteElement()
print(seq_list.SeqList)

遍历表中的元素

    def TraverseElement(self):
        for element in self.SeqList:
            print(element)

拓展,创建一个二维表,并且添加表头

class Table:
    def __init__(self, num_rows, num_columns):
        self.table = []
        # 添加表头
        header_row = ["Header_" + str(i) for i in range(num_columns)]
        self.table.append(header_row)
        # 创建二维表格
        for _ in range(num_rows):
            #for _ in range(num_rows-1): 表示我们在循环中不需要使用循环变量的值,我们只是想循环 num_rows 次。
            row = [None] * num_columns
            self.table.append(row)

    def display(self):
        for row in self.table:
            print(row)

# 创建一个 3x4 的二维表
table = Table(3, 4)
table.display()

#运行结果
['Header_0', 'Header_1', 'Header_2', 'Header_3']
[None, None, None, None]
[None, None, None, None]
[None, None, None, None]

给表中添加内容

class Table:
    def __init__(self, num_rows, num_columns):
        self.table = []
        # 添加表头
        header_row = ["Header_" + str(i) for i in range(num_columns)]
        self.table.append(header_row)
        # 创建二维表格
        for _ in range(num_rows-1):
            row = [None] * num_columns
            self.table.append(row)

    def display(self):
        for row in self.table:
            print(row)

    def set_value(self, row_index, column_index, value):
        if 0 <= row_index < len(self.table) and 0 <= column_index < len(self.table[0]):
            self.table[row_index][column_index] = value
        else:
            print("Invalid row or column index")

# 创建一个 3x4 的二维表
table = Table(3, 4)
table.display()

# 向表格中添加内容
table.set_value(1, 2, "Content")
table.set_value(2, 3, 10)

print("添加内容后的表格:")
table.display()

题目

学生姓名数学成绩英语成绩物理成绩
张三859088
李四788592
王五909285

计算班级各科成绩的平均分

 

class Table:
    def __init__(self, num_rows, num_columns):
        self.table = []
        # 添加表头
        header_row = ["Header_" + str(i) for i in range(num_columns)]
        self.table.append(header_row)
        # 创建二维表格
        for _ in range(num_rows-1):
            row = [None] * num_columns
            self.table.append(row)

    def display(self):
        for row in self.table:
            print(row)

    def set_value(self, row_index, column_index, value):
        if 0 <= row_index < len(self.table) and 0 <= column_index < len(self.table[0]):
            self.table[row_index][column_index] = value
        else:
            print("Invalid row or column index")

    def __getitem__(self, index):
        return self.table[index]
    #实际上这一行是一个递归操作,递归!!!
#另一种根据根据索引设置值的方法
    def __setitem__(self, index, value):
        row_index, column_index = index
        self.table[row_index][column_index] = value



if __name__ == '__main__':
    table = Table(4, 4)
    table.set_value(0, 0, "学生姓名")
    table.set_value(0, 1, "数学成绩")
    table.set_value(0, 2, "英语成绩")
    table.set_value(0, 3, "物理成绩")
    table.set_value(1, 0, "张三")
    table.set_value(1, 1, 85)
    table.set_value(1, 2, 33)
    table.set_value(1, 3, 88)
    table.set_value(2, 0, "李四")
    table.set_value(2, 1, 78)
    table.set_value(2, 2, 85)
    table.set_value(2, 3, 92)
    table.set_value(3, 0, "王五")
    table.set_value(3, 1, 90)
    table.set_value(3, 2, 92)
    table.set_value(3, 3, 85)
    table.display()

    print(table[1][2])
    table[1][2] = 90
    table.display()

    print("数学成绩的平均值是",int(table[1][1]+table[2][1]+table[3][1])/3)
#运行结果

['学生姓名', '数学成绩', '英语成绩', '物理成绩']
['张三', 85, 33, 88]
['李四', 78, 85, 92]
['王五', 90, 92, 85]
33
['学生姓名', '数学成绩', '英语成绩', '物理成绩']
['张三', 85, 90, 88]
['李四', 78, 85, 92]
['王五', 90, 92, 85]
数学成绩的平均值是 84.33333333333333

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值