python 列表的高级应用


当前版本:

  • Python 3.8.4

简介

    列表(list)是Python编程语言中的基本数据类型之一,也是一个非常重要的通用序列。在其它编程语言中,它们通常被称为“数组”。可以存储多个元素,包括数字、字符串、甚至其他列表,是最常用的数据类型之一。

    这篇文章主要介绍列表的各种处理方式和应用方法。

        

文章目录如下

1. 如何定义列表

2. 处理列表的方式

2.1. 统计元素

2.2. 添加元素

2.3. 修改元素

2.4. 删除元素

2.5. 索引取值

2.6. 拷贝方式

3. 列表的应用方法

3.1. 迭代循环

3.2. 数据处理

3.3. 实现缓存

3.4. 数据结构算法

① 线性搜索

② 二分搜索

③ 排序算法


        

1. 如何定义列表

列表可以使用两个方式定义:

l = []        # 定义一个空列表
l = list()    # 定义一个空列表

列表用方括号 [ ] 来表示,左括号开始,右括号结束。括号中的数据称为元素,这些元素以逗号分割,可以是数字、字符串,或者列表。

# 定义一个列表,包含数字、字符串和列表
l = [123 ,'AAA', [10, 20]]

        

在定义列表式时,除了手动去固定写入元素外,还可以使用迭代来定义:

l = [x for x in range(1, 6)]

  • 将函数的返回值或结果赋值给列表也是同理。

        

那么列表的作用是什么呢?

比如某个项目需要一个自动化框架,将需要处理的内容写到 Excel 文件中,再通过这个框架去读取文件内容,那么列表可以作为临时存储空间,将其保存到内部后开始操作:

# 将文件名放入列表中
file = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']

# 遍历这个列表中的文件名
for f in file:
    print(f"开始执行项目,处理文件:{f}")
    '''省略处理文件的代码'''

  • 列表的各种应用方法见《目录3》 

         

2. 处理列表的方式

列表的主要处理方法包括:增删改查、索引取值、深拷贝和浅拷贝的区别,下面按章节逐个介绍。

2.1. 统计元素

在列表中,用逗号分割的字符被称为元素,比如:

l = [ 100, 200, 'AAA', 'BBB' ]

这里面包含4个元素,这四个元素分别是100、200、AAA、BBB。与字符串不同,字符串是按单个字符统计,列表是按分隔符统计。

例:获取第2个元素

l = [ 100, 200, 'AAA', 'BBB' ]
print(l[1])

直接通过索引即可(索引的具体用法见《目录 2.5》) 

        

统计元素的方法如下:

  • len:统计元素个数
  • count:统计某个元素出现的次数
  • max:统计最大的数值
  • min:统计最小的数值
  • sort:数字升序排序
  • sorted:数字升序或降序排序
  • reverse:元素反转

        

【方式一】统计元素的个数 len

l = [ 100, 200, 'AAA', 'BBB' ]
len(l)

        

【方式二】统计某个元素出现的个数 count

l = [ 100, 200, 'AAA', 'BBB' ]
l.count("A")

  • 注意:count的查看元素的个数,而不是单个字符的个数

        

【方式三】查询最大值 max(仅支持数字)

L = [3, 43, 2, 98]
max(L)

        

【方式四】查询最小值 min(仅支持数字)

L = [3, 43, 2, 98]
min(L)

        

【方式五】升序 sort、sorted(仅支持数字)

L1 = [4, 1, 9]
L1.sort()

L2 = [5, 3, 7]
L2 = sorted(L2, reverse=False)

        

【方式六】降序 sorted(仅支持数字)

L = [5, 3, 7]
L = sorted(L, reverse=True)

        

【方式七】元素反转 reverse

L = [ 100, 200, 'AAA', 'BBB' ]
L.reverse()

        

2.2. 添加元素

列表可以通过索引指定位置添加元素,也可以直接向列表最后面追加元素。

  • insert:按索引添加
  • append:在列表后面追加1个元素
  • extend:在列表后面追加多个元素

        

【方式一】指定索引添加元素 insert

'''方法1'''
L = [ 100, 200, 'AAA', 'BBB' ]
L.insert(0, 500)    # 在索引为0处添加元素

'''方法2'''
L = [ 100, 200, 'AAA', 'BBB' ]
L[0:0] = [500]      # 在索引为0处添加元素

在索引为1处添加多个元素

L = [ 100, 200, 'AAA', 'BBB' ]
L[1:1] = [500, 'EEE']      # 在索引为1处添加元素

        

【方式二】在列表后面追加元素 append

L = [1, 2, 3]
L.append('AAA')

append 不支持追加多个元素,但可以使用符号 +

L = [1, 2, 3]
L = L + ['AAA', 'BBB']

        

【方式三】追加多个元素 extend

L = [1, 2, 3]
L.extend(('a', 'b', 10))    # 需要使用一个括号

直接迭代添加整数

L = ['A', 'B', 'C']
L.extend(range(10,15))    # 使用range迭代

        

2.3. 修改元素

python 一般利用索引来修改元素

【方式一】按索引修改单个元素

L = ['A', 'B', 'C', 'D', 'E']
L[0] = 10    # 修改第1个元素
L[-1] = 20   # 修改最后1个元素

        

【方式二】按索引修改多个元素

L = ['A', 'B', 'C', 'D', 'E']
L[:3] = [10, 20]    # 将前3个元素修改为2个元素

        

【方式三】迭代修改指定的元素名

L = [100, 'BBB', 'AAA', 'BBB', 'BBB']
# 用迭代的方式将BBB修改为EEE
new_L = [elem if elem != 'BBB' else 'EEE' for elem in L]

        

2.4. 删除元素

python 支持通过索引删除和元素名删除

【方式一】按索引删除元素 del、pop

L = ['A', 'B', 'C', 'D', 'E']

# del支持删除多个元素
del L[0]
del L[:3]

# pop只支持删除一个元素
L.pop(0)    # 删除第一个元素

        

【方式二】按元素名删除 remove

L = ['A', 'B', 'C', 'B', 'D']
L.remove('B')    # 仅支持删除1个元素

        

【方式三】按元素名删除多个元素(迭代)

L = ['A', 'B', 'C', 'B', 'D']
d = ['A', 'B']  # 需要删除的元素列表
new_L = [elem for elem in L if elem not in d]    # 迭代删除

        

【方式四】按索引删除多个元素(迭代)

del_index=[0, 1, 2]    #指定要删除的索引下标,不能使用负数(-1)
L1 = ['a', 'b', 'c', 'd', 'e']
L2=[i for num,i in enumerate(L1) if num not in del_index]

        

2.5. 索引取值

索引(Index)是用于标识和访问数据结构中元素的位置或标签,在Python中,索引用于访问字符串、列表、元组和其他序列类型的元素。

索引的值从0开始

元素:a b c d e f
索引:0 1 2 3 4 5
  • 第1个元素的索引为0,第2个元素的索引为1,以此类推。。。

读取对应索引的值使用 变量[ ] 的方式

L = ['a', 'b', 'c', 'd', 'e']
L[0]    # 读取第1个元素
L[3]    # 读取第4个元素
L[-1]   # 读取最后1个元素

        

除了读取单个元素,还能通过切片的方式范围读取

变量[起始索引:结束索引]
L = ['a', 'b', 'c', 'd', 'e']
L[:2]    # 读取前2个元素
L[-2:]   # 读取后2个元素
L[1:3]   # 读取索引为1~2的元素

  • 第1个元素用0表示,最后1个元素用-1表示。
  • 范围读取时冒号前面为空(默认读取前面全部),冒号后面为空(默认读取后面全部)。
  • 范围取值时不包括结束索引。[1:3] 表示读取索引1,2;[3:6] 表示读取索引3,4,5。

        

切片时支持指定步长

变量[起始索引:结束索引:步长]    # 步长默认1
L = ['a', 'b', 'c', 'd', 'e']
L[1::1]  # 读取索引为1和后面的元素,步长为1
L[1::2]  # 读取索引为1和后面的元素,步长为2
L[::2]   # 读取全部元素,步长为2

        

2.6. 拷贝方式

python 支持深拷贝和浅拷贝两种方式。

  • 深拷贝复制对象及其子对象本身,递归地复制整个对象结构。改变原始对象中的子对象不会影响到深拷贝后的对象。
  • 浅拷贝仅复制对象的引用,而不复制子对象本身。改变原始对象中的子对象也会影响到浅拷贝后的对象。

        

它们各自的优点

  • 深拷贝的优点是创建了一个全新的独立对象,可以对深拷贝后的对象进行修改,而不会影响到原始对象。深拷贝通常用于需要独立副本的场景,特别是在进行递归操作或修改子对象时。
  • 浅拷贝的优点是速度较快,因为它仅复制引用而不进行实际的复制操作。如果原始对象的子对象较大而且不会被修改,那么浅拷贝可以节省大量的内存。

        

他们各自的缺点

  • 深拷贝的缺点:它可能会消耗更多的内存和处理时间,特别是当要复制的对象结构较大、嵌套层级较深时。进行深拷贝可能需要递归地复制整个对象,这可能会导致性能下降。
  • 浅拷贝的缺点:如果原始对象中的子对象是可变的,那么改变原始对象中的子对象也会影响到浅拷贝后的对象,可能会导致意外的副作用。

定义一个深拷贝需要导入标准库 copy

# 导入标准库
import copy

# 定义一个列表a
a = [1, 2, 3, [4, 5]]

# 将列表a的值深拷贝到b
b = copy.deepcopy(a)

        

浅拷贝可以使用 copy() 函数实现,或者直接赋值

# 方式一
a = [1, 2, 3, [4, 5]]
b = a.copy()

# 方式二
a = [1, 2, 3, [4, 5]]
b = [a, "BBB"]

        

注意:修改原始列表,浅拷贝过去的列表不会发生变化

a = [1, 2, 3, [4, 5]]
b = a.copy()

对于浅拷贝,它仅仅是复制了列表对象的引用,所以当你改变原始列表(例如修改索引为0的值)时,只有原始列表受到影响,而副本不会受到影响。也就是说只有改变子对象,浅拷贝的值才会发生变化。

        

3. 列表的应用方法

3.1. 迭代循环

迭代循环是列表惯用的方式,比如直接循环列表中的元素

L = [1, 2, 3, [4, 5]]
for i in L:
    print(f"当前元素为:{i}")

        

除了直接遍历元素,还能遍历该元素的索引 enumerate

# 定义列表
L = ['AAA', 'BBB', 'CCC']

# 遍历列表中的索引和元素
for index,element in enumerate(L):
    print(f"索引:{index}, 元素:{element}")

        

索引的起始值为0,所以默认从0开始。如果业务有其他需求,我们还可以指定从1开始

# 定义列表
L = ['AAA', 'BBB', 'CCC']

# 遍历列表中的索引和元素
for index,element in enumerate(L, start=1):
    print(f"索引:{index}, 元素:{element}")

        

3.2. 数据处理

我们时常使用列表来存储和操作数据集,不少操作中需要进行排序、过滤、计算等操作,介绍几种方法:

【方式一】列表排序(元素仅支持数字)

L = [4, 2, 1, 3, 5]
L.sort()  # 升序
L = sorted(L, reverse=False)    # 升序
L = sorted(L, reverse=True)     # 降序
L.reverse()  # 反转

        

【方式二】过滤列表(筛选偶数)

# 定义一个全数字的列表
L = [1, 2, 3, 4, 5]
# 过滤偶数
L_new = list(filter(lambda x: x % 2 == 0, L))

        

【方式三】计算列表的值

# 定义一个全是数字的列表
L = [1, 2, 6, 8, 5, 10]

# 求和
sum_result = sum(L)

# 求最大值
max_result = max(L)

# 求最小值
min_result = min(L)

# 求平均值
avg_result = sum(L) / len(L)

# 所有值乘以 10
multiplied_list = [x * 10 for x in L]

        

3.3. 实现缓存

列表的可变性使其适用于实现缓存机制,可以存储临时的计算结果或其他需要快速访问的数据。

# 封装一个使用列表缓存的类
class ListCache:
    def __init__(self, max_size):
        self.max_size = max_size   # 缓存的最大容量
        self.cache = []            # 定义一个空的缓存列表

    def get(self, key):
        '''检查是否有对应的缓存项'''
        for item in self.cache:
            if item['key'] == key:
                return item['value']
        return None

    def set(self, key, value):
        '''判断缓存是否已满'''
        if len(self.cache) >= self.max_size:
            self.cache.pop(0)   # FIFO方式移除最旧的缓存项

        # 使用字典的方式添加新的缓存项
        self.cache.append({'key': key, 'value': value})

if __name__ == '__main__':
    # 创建一个最大容量为 2 的缓存
    LC = ListCache(2)

    # 向方法中添加两个缓存数据
    LC.set('k1', 'AAA')
    LC.set('k2', 'BBB')

    # 查看结果
    print(LC.get('k1'))     # AAA
    print(LC.get('k2'))     # BBB

    # 向方法中添加第3个缓存数据
    LC.set('k3', 'CCC')
    print(LC.get('k1'))     # 此时的k1已经被清理

        

3.4. 数据结构算法

列表是一种常见的数据结构,它可以存储多个元素,并且元素的顺序是有序的。这里列举几种常见的算法

① 线性搜索

  • 线性搜索的方式是从列表的起始位置开始逐个比较元素,直到找到目标元素或遍历完整个列表

代码如下

# 定义一个列表
arr = [4, 2, 7, 1, 9, 5]
# 需要查找的值
target = 7

def linear_search(arr, target):
    # 遍历该数组的长度
    for i in range(len(arr)):
        # 通过索引来判断这个值是否为真
        if arr[i] == target:
            return i  # 返回目标元素的索引
    return -1  # 如果目标元素不存在于列表中,返回 -1

# 传入列表和需要查找的值
index = linear_search(arr, target)
print(f"元素{target}的索引为:{index}")

        

② 二分搜索

  • 二分搜索要求列表是有序的。通过将列表分成两半并与中间元素进行比较,以确定目标元素位于哪一半,然后再在该半中进行搜索。该算法的时间复杂度为 O(log n),比线性搜索更高效。

代码如下

# 定义一个列表
arr = [1, 12, 4, 6, 7, 3]
# 需要查询的值
target = 7

def binary_search(arr, target):
    arr.sort()  # 先将数组排序(升序)
    low = 0     # 定义最小索引
    high = len(arr) - 1     # 定义最大索引

    while low <= high:
        mid = (low + high) // 2 # 取中间索引的值(整数)
        if arr[mid] == target:  # 判断是否该索引的值等于target
            return mid          # 为真,返回目标元素的索引
        elif arr[mid] < target:
            low = mid + 1       # 如果结果小于target,将索引+1
        else:
            high = mid - 1      # 如果结果大于target,将索引-1

    return -1  # 如果目标元素不存在于列表中,返回 -1

# 向函数中传入列表和需要查找的值
index = binary_search(arr, target)
print("目标元素的索引:", index)

        

③ 排序算法

冒泡排序

arr = [4, 2, 7, 1, 9, 5]

def bubble_sort(arr):
    n = len(arr)

    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

sorted_arr = bubble_sort(arr)
print("排序后的列表:", sorted_arr)

        

插入排序

arr = [4, 2, 7, 1, 9, 5]

def insertion_sort(arr):
    n = len(arr)

    for i in range(1, n):
        key = arr[i]
        j = i - 1

        while j >= 0 and arr[j] > key:
            arr[j+1] = arr[j]
            j -= 1
        
        arr[j+1] = key
    
    return arr

sorted_arr = insertion_sort(arr)
print("排序后的列表:", sorted_arr)

        

选择排序

arr = [4, 2, 7, 1, 9, 5]

def selection_sort(arr):
    n = len(arr)

    for i in range(n-1):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
            
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

sorted_arr = selection_sort(arr)
print("排序后的列表:", sorted_arr)

        

快速排序

arr = [4, 2, 7, 1, 9, 5]

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[0]
    less = [x for x in arr[1:] if x <= pivot]
    greater = [x for x in arr[1:] if x > pivot]

    return quick_sort(less) + [pivot] + quick_sort(greater)

sorted_arr = quick_sort(arr)
print("排序后的列表:", sorted_arr)

        

归并排序

arr = [4, 2, 7, 1, 9, 5]

def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left_half = arr[:mid]
    right_half = arr[mid:]

    left_half = merge_sort(left_half)
    right_half = merge_sort(right_half)

    return merge(left_half, right_half)

def merge(left, right):
    result = []
    i, j = 0, 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    result.extend(left[i:])
    result.extend(right[j:])

    return result

sorted_arr = merge_sort(arr)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321695.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 字符串的详细处理方法

当前版本&#xff1a; Python 3.8.4 简介 字符串是由字符组成的序列&#xff0c;可以用单引号、双引号或三引号&#xff08;单引号或双引号的连续使用&#xff09;括起来。一般用来表示和处理文本信息&#xff0c;可以是字母、数字、标点符号以及其他特殊字符&#xff0c;用于…

力扣每日一练(24-1-14)

做过类似的题&#xff0c;一眼就是双指针&#xff0c;刚好也就是题解。 if not nums:return 0p1 0 for p2 in range(1, len(nums)):if nums[p2] ! nums[p1]:p1 1nums[p1] nums[p2]return p1 1 根据规律&#xff0c;重复的数字必定相连&#xff0c;那么只要下一个数字与上一…

WeNet2.0:提高端到端ASR的生产力

摘要 最近&#xff0c;我们提供了 WeNet [1]&#xff0c;这是一个面向生产&#xff08;工业生产环境需求&#xff09;的端到端语音识别工具包&#xff0c;在单个模型中&#xff0c;它引入了统一的两次two-pass (U2) 框架和内置运行时&#xff08;built-in runtime&#xff09;…

SpringCloud.04.熔断器Hystrix( Spring Cloud Alibaba 熔断(Sentinel))

目录 熔断器概述 使用Sentinel工具 什么是Sentinel 微服务集成Sentinel 配置provider文件&#xff0c;在里面加入有关控制台的配置 实现一个接口的限流 基本概念 重要功能 Sentinel规则 流控规则 简单配置 配置流控模式 配置流控效果 降级规则 SentinelResource…

Linux/Traverxec

Enumeration nmap 使用nmap快速扫描目标&#xff0c;发现对外开放了22和80&#xff0c;第一个问题就是问80端口运行的是什么服务&#xff0c;针对这两个端口扫描对应的详细信息后就能得到答案 Nostromo 从nmap的扫描结果可以看到&#xff0c;目标开启了80端口&#xff0c;且…

一二三应用开发平台文件处理设计与实现系列之5——MinIO技术预研

背景 上篇介绍了文件读写框架设计与实现&#xff0c;同时顺便说明了本地磁盘存储模式的实现模式。 今天来说下基于文件读写框架&#xff0c;如何集成对象存储组件minio&#xff0c;集成之前&#xff0c;需要对minio进行必要的了解&#xff0c;本篇是minio的技术预研。 minio简…

Python - 深夜数据结构与算法之 AVL 树 红黑树

目录 一.引言 二.高级树的简介 1.树 2.二叉树 3.二叉搜索树 4.平衡二叉树 三.AVL 树 ◆ 插入节点 ◆ 左旋 ◆ 右旋 ◆ 左右旋 ◆ 右左旋 ◆ 一般形式 ◆ 实际操作 ◆ 总结 四.红黑树 ◆ 概念 ◆ 示例 ◆ 对比 五.总结 一.引言 前面我们介绍了二叉树、二叉…

论文阅读 Self-Supervised Burst Super-Resolution

这是一篇 ICCV 2023 的文章&#xff0c;主要介绍的是用自监督的方式进行多帧超分的学习 Abstract 这篇文章介绍了一种基于自监督的学习方式来进行多帧超分的任务&#xff0c;这种方法只需要原始的带噪的低分辨率的图。它不需要利用模拟退化的方法来构造数据&#xff0c;而且模…

爬虫验证码分析

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 本文只做简单的验证码分析&#xff0c;不涉及扣代码等逆向 一、常见得验证码平台 易盾&#xff1a;https://dun.163.com/pr…

重学Java 5 idea详细使用和运算符

慢点跑&#xff0c;前面的路不好走 ——24.1.14 一、IDEA的使用 1.idea的介绍 1.概述&#xff1a;开发工具 2.特点&#xff1a; a、idea是java写的&#xff0c;所以本地上必须有正确的jdk环境 b、idea自动保存 c、不用我们打开dos命令窗口执行javac和java命令 d、idea有强大的…

数据结构与算法教程,数据结构C语言版教程!(第四部分、字符串,数据结构中的串存储结构)一

第四部分、字符串&#xff0c;数据结构中的串存储结构 串存储结构&#xff0c;也就是存储字符串的数据结构。 很明显&#xff0c;字符串之间的逻辑关系也是“一对一”&#xff0c;用线性表的思维不难想出&#xff0c;串存储结构也有顺序存储和链式存储。 提到字符串&#xff…

Python 自学(八) 之模块

目录 1. import语句导入模块 P206 2. from ... import 语句导入模块 P207 3. 模块的搜索目录 sys.path P209 4. 以主程序的形式执行 __name__ P212 5. python中的包 P213 1. import语句导入模块 P206 同一目录下&…

【MATLAB】 SSA奇异谱分析信号分解算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 SSA奇异谱分析&#xff08;Singular Spectrum Analysis&#xff09;是一种处理非线性时间序列数据的方法&#xff0c;可以对时间序列进行分析和预测。 它基于构造在时间序列上的特定矩阵的奇异值分解&#…

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口&#xff1a; package com.sunsplanter.prox…

编曲混音FL Studio21.2对电脑有什么配置要求

FL Studio 21是一款非常流行的音乐制作软件&#xff0c;它可以帮助音乐人和制作人创作出高质量的音乐作品。然而&#xff0c;为了保证软件的稳定性和流畅性&#xff0c;用户需要知道FL Studio 21对电脑的配置要求。本文将介绍FL Studio 21的配置要求&#xff0c;以帮助用户选择…

Open CV 图像处理基础:(七)学习 OpenCV 的图像增强和边缘检测功能

在Java中学习使用 OpenCV 的图像增强和边缘检测功能 目录 在Java中学习使用 OpenCV 的图像增强和边缘检测功能前言图像增强功能对比度调整&#xff08;Core.addWeighted()&#xff09;函数原型&#xff1a;参数说明&#xff1a;代码&#xff1a;示例 直方图均衡化&#xff08;I…

强化学习应用(五):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

图形化编程:开启孩子创新思维的新途径

在科技日新月异的今天&#xff0c;编程已经成为了一项重要的技能。然而&#xff0c;对于孩子们来说&#xff0c;传统的编程语言可能会显得过于复杂和抽象。这时&#xff0c;图形化编程就显得尤为重要。那么&#xff0c;什么是图形化编程&#xff1f;它对孩子有什么帮助呢&#…

web前端算法简介之字典与哈希表

回顾 栈、队列 &#xff1a; 进、出 栈&#xff08;Stack&#xff09;&#xff1a; 栈的操作主要包括&#xff1a; 队列&#xff08;Queue&#xff09;&#xff1a; 队列的操作主要包括&#xff1a; 链表、数组 &#xff1a; 多个元素存储组成的 简述链表&#xff1a;数组&…

权责发生制和收付实现制

目录 一. 权责发生制(应记制)二. 收付实现制 \quad 一. 权责发生制(应记制) 应计制就是应该记入的意思 各项收入和费用的确认应当以“实际发生”&#xff08;归属期&#xff09;而不是以款项的实际收付作为记账的基础。 正是有会计期间假设&#xff0c;才有权责发生制和收付实…