Python-VBA编程500例-021(入门级)

目录

1、平面列表:

1-1、Python:

1-2、VBA:

2、相关文章:

Python算法之旅:https://myelsa1024.blog.csdn.net/article/details/136889623?spm=1001.2014.3001.5502

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信

        平面列表(Flat List)在实际中有多种应用场景,尤其在数据处理、界面展示以及软件开发等领域中发挥着重要作用。常见应用场景有:

1、数据处理与分析:

1-1、数据提取与转换:在处理大型数据集时,平面列表可以作为数据提取和转换的中间结果。通过将复杂的数据结构(如嵌套字典或数组)转化为平面列表,可以更方便地分析和处理数据。
1-2、特征工程:在机器学习和数据分析中,特征工程是一个关键步骤。平面列表可以用于创建和整理特征向量,这些向量是机器学习算法所需的输入。

2、界面展示:

2-1、列表视图:在移动应用或网页应用中,列表视图是一种常见的界面元素。平面列表可以直接映射到这些视图,展示一系列的项目或条目,如新闻列表、商品列表等。
2-2、表格数据展示:在表格中展示数据时,每一行通常可以看作是一个平面列表的实例。这样,可以方便地通过遍历平面列表来填充表格的行。

3、软件开发与编程:

3-1、算法实现:某些算法(如排序、搜索等)在处理数据时,需要数据以平面列表的形式呈现。这样,算法可以更加高效地执行,因为不需要处理复杂的嵌套结构。
3-2、数据结构优化:在编程中,有时为了提高性能或简化逻辑,会将嵌套的数据结构转换为平面列表。例如,在渲染UI组件时,使用平面列表可以减少不必要的嵌套和递归调用。

4、文件与目录操作:

4-1、文件路径解析:在处理文件路径时,虽然路径本身是嵌套的(如目录/子目录/文件),但在某些情况下,将路径转换为平面列表可以更方便地进行路径比较、搜索或操作。
4-2、目录内容展示:在文件管理器或类似的应用中,目录的内容通常以列表的形式展示。虽然目录结构本身是嵌套的,但展示给用户时通常会转化为平面列表,以便用户浏览和选择文件。

        综上所述,平面列表在实际应用中具有广泛的应用场景,包括数据处理、界面展示、软件开发以及文件与目录操作等多个方面。通过将复杂的数据结构转化为平面列表,可以简化处理流程,提高性能,并优化用户体验。

1、平面列表:
1-1、Python:
# 1.问题描述:
# 给定一个混合元素的列表,即元素包括列表、整数等,将其转为一个只包含整数的列表.
# 2.问题示例:
# 输入nested_list = [[3, 5], 6, [8, 10, 11, 24]],输出flattened_list = [3, 5, 6, 8, 10, 11, 24].
# 3.代码实现:
class Solution:
    # 将嵌套列表展平为一个整数列表
    # 参数nested_list:一个嵌套列表,其中每个元素可以是列表或整数
    # 返回值flattened_list:展平后的整数列表
    def flatten(self, nested_list):
        # 使用栈来迭代嵌套列表
        stack = [nested_list]
        # 初始化展平后的列表
        flattened_list = []
        # 当栈不为空时,持续迭代
        while stack:# len(stack)!=0代码可简写为stack
            # 弹出栈顶元素
            current_item = stack.pop()
            # 检查当前元素是否为列表
            if isinstance(current_item, list):# 在Python中,isinstance()是一个内置函数,用于检查一个对象是否是一个已知的类型.
                # 如果是列表,则将其元素逆序入栈
                # 逆序是为了保持原始列表中元素的相对顺序
                # 在Python中,reversed()是一个内置函数,用于返回一个反向迭代器,即它可以将一个序列(如列表、元组或字符串)的元素反转顺序后逐个访问.
                stack.extend(reversed(current_item))
            else:
                # 如果不是列表(即整数),则添加到展平后的列表中
                flattened_list.append(current_item)
        # 返回展平后的列表
        return flattened_list
# 主函数
if __name__ == '__main__':
    # 定义一个嵌套列表
    nested_list = [[3, 5], 6, [8, 10, 11, 24]]
    # 创建Solution对象
    solution = Solution()
    # 调用flatten方法展平嵌套列表
    flattened_list = solution.flatten(nested_list)
    # 打印输入和输出
    print("输入:", nested_list)
    print("输出:", flattened_list)
# 4.运行结果:
# 输入: [[3, 5], 6, [8, 10, 11, 24]]
# 输出: [3, 5, 6, 8, 10, 11, 24]
1-2、VBA:
Rem 自定义函数,功能:将嵌套列表展平为一个整数列表
Function Flatten(nestedList As Variant) As Variant
    Dim stack As Collection ' 定义栈,用于存放待处理的元素
    Dim currentItem As Variant ' 定义变量,用于存放从栈中弹出的元素
    Dim flattenedList() As Variant ' 使用数组代替集合,提高性能
    Dim i As Long ' 定义循环变量
      
    ' 创建栈集合
    Set stack = New Collection
    ' 将嵌套列表的第一个元素(整个嵌套列表)压入栈
    stack.Add nestedList
    ' 初始化展平后的列表
    ReDim flattenedList(0) ' 创建一个空的Variant数组
    ' 循环直到栈为空
    Do While stack.count > 0
        ' 弹出栈顶元素
        currentItem = stack.item(stack.count)
        stack.Remove stack.count
        ' 检查当前元素是否为数组(在VBA中,嵌套列表通常表示为数组)
        If IsArray(currentItem) Then
            ' 如果是数组,则逆序遍历其元素并将它们压入栈中
            For i = UBound(currentItem) To LBound(currentItem) Step -1
                stack.Add currentItem(i)
            Next i
        Else
            ' 如果不是数组,则将其添加到展平后的列表中
            ReDim Preserve flattenedList(UBound(flattenedList) + 1)
            flattenedList(UBound(flattenedList)) = currentItem
        End If
    Loop
    ' 设置函数的返回值为展平后的列表
    Flatten = flattenedList
End Function
Rem 执行过程,功能:调用自定义函数Flatten和过程PrintArray,将嵌套列表展平为一个整数列表,并在立即窗口中输出结果
Sub TestRun()
    Dim nestedList As Variant ' 定义变量,用于存放嵌套列表
    Dim flattenedList As Variant ' 定义变量,用于存放展平后的列表
      
    ' 初始化嵌套列表
    nestedList = Array(Array(3, 5), 6, Array(8, 10, 11, 24))
    ' 调用Flatten函数来展平列表
    flattenedList = Flatten(nestedList)
    ' 在立即窗口中打印输入和输出
    Debug.Print "输入:"
    PrintArray (nestedList) ' 调用辅助过程打印输入列表
    Debug.Print "输出:"
    PrintArray (flattenedList) ' 调用辅助过程打印输出列表
End Sub
  
Rem 辅助过程,功能:在VBA的立即窗口中打印数组或嵌套数组
Sub PrintArray(arr As Variant)
    Dim i As Long ' 定义循环变量
    Dim subArr As Variant ' 定义变量,用于存放子数组
      
    ' 遍历数组中的每个元素
    For i = LBound(arr) To UBound(arr)
        ' 检查元素是否为数组
        If IsArray(arr(i)) Then
            Debug.Print "(" ' 打印左括号
            PrintArray (arr(i)) ' 递归调用打印子数组
            Debug.Print ")" ' 打印右括号
        Else
            ' 如果不是数组,则直接打印元素
            Debug.Print arr(i)
        End If
    Next i
End Sub
'输出结果:
'输入:
'(
'3
'5
')
'6
'(
'8
'10
'11
'24
')
'输出:
'
'3
'5
'6
'8
'10
'11
'24

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行TestRun程序,在立即窗口中输出结果。

2、相关文章:

2-1、Python-VBA编程500例-020-01(入门级) 

2-2、Python-VBA编程500例-020-02(入门级)

2-3、Python-VBA编程500例-022(入门级) 

2-4、Python-VBA编程500例-023(入门级) 

Python算法之旅:https://myelsa1024.blog.csdn.net/article/details/136889623?spm=1001.2014.3001.5502
个人主页:非风V非雨-CSDN博客
欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

神奇夜光杯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值