【Python学习篇】Python实验小练习——高级数据结构(五)

简介: 【Python学习篇】Python实验小练习——高级数据结构(五)

一、实验目的

   

       掌握序列的基本操作

       掌握集合、字典的基本操作

二、实验环境

       联网计算机一台/每人,内装Windows 7以上操作系统和安装Python 3.7集成开发环境IDLE。

三、实验内容

       在本次实验内容中,我们将深入探讨并实践Python中的序列类型(列表和元组)以及集合和字典的基本操作技能,这包括学习如何对序列进行索引和切片以获取特定元素,如何向列表添加新元素以及删除现有元素,掌握列表排序的方法,同时也将涵盖集合的基本操作,如元素的添加和移除,以及执行集合的交、并、差集运算。此外,我们还会了解字典的使用,包括如何创建字典、访问和设置其键值对,进行键或值的获取,以及如何高效遍历字典中的所有元素。这些操作是Python编程中的基石,对任何希望精进数据处理技能的学习者来说都是必须掌握的技能。  

四、实验步骤和结果

       我们将首先通过创建不同类型的数据结构——列表、元组、集合和字典——来了解它们的基础特性和用法。我们将学习如何对列表和元组进行索引访问和切片操作,用以提取或更新序列中的特定数据段。接着,实验将指导我们如何在列表中添加或删除元素,并演示如何对列表内容进行排序。

        在集合的部分,实验将展示如何添加或移除集合中的元素,并实践运用集合的数学运算来探索不同集合之间的关系,如计算交集、并集和差集。

        最后,在探究字典的实验中,我们将练习如何动态地存取和更新键值对,学习如何删除字典中的项,以及如何利用循环语句高效地遍历字典的键和值。

        实验的结果应当是参与者能够熟练地运用这些基础数据结构来存储和处理数据,并能够将这些操作应用到更复杂的编程任务中。这些基本操作是进行数据分析、算法设计和日常编程问题解决时的核心技能。

4.1  列表实现。编写一个函数,生成随机密码,要求:

       (1)密码长度不小于8位,不大于16位

       (2)字符包括大小写字母和数字

思路:

       为了生成一个符合要求的随机密码,我们可以使用Python的random模块来选择随机字符,并且确保密码的长度介于8到16位之间。密码中的字符将从大小写字母和数字中选取。

       在这个函数中,我们首先定义了密码的最小和最大长度,然后创建了一个字符集合,该集合包含了大小写字母和数字。我们使用random.randint来确定密码的随机长度,它将返回一个8到16之间的整数。最后,我们通过random.choice在指定长度内随机选取字符来生成密码,并将这些字符连接成一个字符串。

       这段代码可以根据需要多次调用generate_random_password函数,生成多个随机密码。

代码实现:

import random
import string
 
def generate_random_password():
    # 密码长度范围
    min_length = 8
    max_length = 16
 
    # 可用的字符集合,包括大小写字母和数字
    characters = string.ascii_letters + string.digits
 
    # 随机选择一个密码长度
    password_length = random.randint(min_length, max_length)
 
    # 随机选择字符并生成密码
    password = ''.join(random.choice(characters) for i in range(password_length))
 
    return password
 
# 调用函数生成密码
password = generate_random_password()
print(password)

运行结果:

4.2  集合实例。删除5-1中生成的密码字符串中的重复字符,不改变原来的字符串顺序。

思路:

       如果要删除之前生成的密码字符串中的重复字符,同时不改变字符的原始顺序,在这个函数remove_duplicates_preserve_order中,我们遍历输入的字符串s,并使用一个集合seen来跟踪已经遇到的字符。如果字符还没有出现过,我们将它添加到seen集合和result列表中。最后,我们使用''.join(result)来将列表中的字符合并成一个新的字符串,这个新字符串就不包含任何重复的字符,同时保留了原始字符串中字符的顺序。

代码实现:

def remove_duplicates_preserve_order(s):
    seen = set()
    result = []
    for char in s:
        if char not in seen:
            seen.add(char)
            result.append(char)
    return ''.join(result)
 
# 假设我们之前生成的密码是以下字符串
password = "aAbBcCdD1234aAbBcC"
 
# 删除密码中的重复字符
password_no_duplicates = remove_duplicates_preserve_order(password)
print(password_no_duplicates)

运行结果:

4.3 字典实例。输入一段中英文字符串,统计每个字符出现的次数。

思路:

       要统计一个字符串中每个字符出现的次数,我们可以使用字典这一数据结构。字典是一个键值对集合,其中键是唯一的。对于这个任务,我们可以把字符作为键,该字符出现的次数作为值,我们定义了一个函数count_characters来统计字符串中每个字符的出现次数。我们使用一个for循环遍历字符串中的每个字符,并在字典char_count中记录它们的出现次数。最后,我们打印出每个字符及其计数。

代码实现:

def count_characters(s):
    # 初始化一个空字典来存储字符及其出现次数
    char_count = {}
 
    # 遍历输入字符串中的每个字符
    for char in s:
        # 如果字符在字典中,则增加其计数
        if char in char_count:
            char_count[char] += 1
        # 否则,将字符添加到字典中,并将其计数设置为1
        else:
            char_count[char] = 1
 
    # 返回包含字符计数的字典
    return char_count
 
# 输入的字符串,可以是任意的中英文混合字符串
input_string = "你好,Hello World!"
 
# 获得字符计数的字典
character_counts = count_characters(input_string)
 
# 打印字符及其出现次数
for char, count in character_counts.items():
    print(f"'{char}': {count}")

运行结果:

4.4 扩展1:数字重复统计。

       (1)随机生成1000个整数

       (2)数字范围[20,100]

       (3)升序输出所有不同的数字及每个数字重复的次数。

思路:

       使用随机数生成器生成1000个范围在20到100之间的整数。 用字典来统计每个数字出现的次数。 将字典转换为一个列表,列表中的每个元素都是一个包含数字和相应计数的元组。 按数字的升序对这个列表进行排序。 输出排序后的列表

代码实现:

import random
 
def generate_and_count_numbers(num_count, range_start, range_end):
    # 生成指定数量和范围的随机整数
    numbers = [random.randint(range_start, range_end) for _ in range(num_count)]
    
    # 统计每个数字出现的次数
    count_dict = {}
    for num in numbers:
        count_dict[num] = count_dict.get(num, 0) + 1
 
    # 将字典转换为列表,并按数字的升序排序
    sorted_count_list = sorted(count_dict.items())
 
    # 返回排序后的数字计数列表
    return sorted_count_list
 
# 设置参数:1000个整数,数字范围20到100
num_count = 1000
range_start = 20
range_end = 100
 
# 执行函数
sorted_count_list = generate_and_count_numbers(num_count, range_start, range_end)
 
# 打印输出
for num, count in sorted_count_list:
    print(f"数字 {num} 出现了 {count} 次。")

运行结果:

4.5 扩展2:输入一段英文字符串,将其按照手机上的9键输入规则转换位相应的数字,即abc-2,def-3,ghi-4,jkl-5,mno-6,pqrs-7,tuv-8,wxyz-9

思路:

       可以通过创建一个查找表来将每个英文字母映射到相应的数字,然后遍历输入的字符串,将每个字母替换为对应的数字来解决。

       首先定义了一个函数text_to_keypad,它接收一个字符串作为输入。在函数内部,它定义了一个映射表keypad_mapping,该表将每个英文字母映射到对应的数字键。然后,代码遍历输入字符串中的每个字符,并查找相应的数字来替换它。如果字符不是字母,它将被保留原样。最后,函数返回转换后的字符串。

代码实现:

def text_to_keypad(input_string):
    # 创建字母到数字的映射表
    keypad_mapping = {
        'a': '2', 'b': '2', 'c': '2',
        'd': '3', 'e': '3', 'f': '3',
        'g': '4', 'h': '4', 'i': '4',
        'j': '5', 'k': '5', 'l': '5',
        'm': '6', 'n': '6', 'o': '6',
        'p': '7', 'q': '7', 'r': '7', 's': '7',
        't': '8', 'u': '8', 'v': '8',
        'w': '9', 'x': '9', 'y': '9', 'z': '9',
    }
 
    # 遍历输入的字符串,将每个字母转换为对应的数字
    output = ''
    for char in input_string.lower():  # 转换为小写以匹配映射表
        if char in keypad_mapping:
            output += keypad_mapping[char]  # 替换为对应数字
        else:
            output += char  # 不是字母的字符保持不变
 
    return output
 
# 示例输入
input_text = "Hello World!"
print(text_to_keypad(input_text))  # 打印转换后的数字序列

运行结果:

五、总结

5.1 实验过程中的问题及解决方法:

       在这个特定的实验中,问题是从一个含有重复字符的字符串中删除重复的字符,同时保持剩余字符的原始顺序。在Python中,字符串是不可变的序列,这意味着我们不能直接修改字符串中的字符。因此,为了解决这个问题,我们需要采用一种方法来创建一个新的字符串,其中包含原始字符串中的唯一字符,且顺序不变。

       解决方法为:遍历原始字符串中的每个字符。对于每个字符,检查它是否已经在集合中了。如果字符不在集合中,将其添加到集合和结果字符串中。如果字符已经在集合中,则忽略它,继续下一个字符。遍历完成后,返回新构建的结果字符串,它将不包含重复的字符。

5.2 实验收获

        我们使用了集合(set)数据结构,因为它能够高效地处理重复性问题,并且可以快速判断某个元素是否已经存在于集合中,我们学习了如何在去除重复元素的同时保持原始顺序,这在实际编程中非常有用,因为很多情况下元素的顺序是有意义的, 字符串在Python中是不可变的,这意味着不能直接修改它们,要改变字符串,必须创建一个新的字符串,解决问题的过程锻炼了算法思维,我们不仅要考虑如何解决问题,还要考虑解决问题的效率,过程中,我们学习了字符串遍历、集合操作和字符串拼接等Python编程的基本技巧, 实验鼓励我们思考如何编写既高效又易于理解的代码。

📝大佬觉得本文有所裨益,不妨轻点一下👍给予鼓励吧!

❤️❤️❤️本人虽努力,但能力尚浅,若有不足之处,恳请各位大佬不吝赐教,您的批评指正将是我进步的动力!😊😊😊

💖💖💖若您认为此篇文章对您有所帮助,烦请点赞👍并收藏🌟,您的支持是我前行的最大动力!

🚀🚀🚀任务在默默中完成,价值在悄然间提升。让我们携手共进,一起加油,迎接更美好的未来!🌈🌈🌈

目录
相关文章
|
8月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
709 0
|
存储 算法 编译器
数据结构实验之矩阵的运算器(二维数组)
本实验旨在通过团队合作,掌握数组和矩阵相关运算的代码实现,包括矩阵的加减、数乘、转置、乘法、n次方及行列式的计算。实验过程中,成员们需分工协作,解决编程难题,最终实现一个功能完备的矩阵计算器。通过本实验,不仅锻炼了编程能力,还加深了对数学概念的理解,同时培养了团队合作精神。
387 4
数据结构实验之串模式匹配问题
本实验旨在掌握串模式匹配技术,通过创建文本文件、实现单词计数与定位功能,最终构建一个包含文件建立、单词统计与定位、程序退出等选项的主菜单,以增强对字符串处理的理解与应用能力。
239 4
|
算法
数据结构实验之最长公共子序列
本实验旨在通过编程实践帮助学生理解串的基本概念及求解最长公共子序列的算法。实验内容包括使用动态规划方法设计并实现算法,以找出给定两序列的最大公共子序列。示例代码展示了如何通过构建状态矩阵和回溯路径来找到解决方案。实验总结指出,`memset()`函数用于内存初始化,且对于特定输入,程序能正确输出最长公共子序列之一。
320 4
|
11月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
683 1
|
存储 开发者 索引
Python 中常见的数据结构
这些数据结构各有特点和适用场景,在不同的编程任务中发挥着重要作用。开发者需要根据具体需求选择合适的数据结构,以提高程序的效率和性能
601 156
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
560 153
|
存储 开发者 Python
Python 中的数据结构与其他编程语言数据结构的区别
不同编程语言都有其设计理念和应用场景,开发者需要根据具体需求和语言特点来选择合适的数据结构
686 151
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
588 156

热门文章

最新文章

推荐镜像

更多