Python程序设计 实验3:列表、元组的应用(上)

简介: Python程序设计 实验3:列表、元组的应用

1. 查找最大元素的索引


编写函数 indicesOfLargestElement(list),输入整数列表list, 返回 list 中最大元素所有的索引,索引以列表形式返回。


例子:

IndexOfLargestElement([2, 1, 3, 1, 3]) # return [2,4]


(1)具体思路


通过max函数获取列表中的最大值,并通过循环在列表中查找,如果当前值等于最大值,则将下标存入列表中。


(2)编程实现


   # 定义函数  
def IndexOfLargestElement(list):  
    return [i for i, a in enumerate(list) if a == max(list)]  
# 主函数  
temp = []  
print("Please input numbers to end with -1:")  
# 循环获取输出  
while True:  
    a = eval(input())  
    if a == -1:  
        break  
    temp.append(a)  
# 进行输出  
print(IndexOfLargestElement(temp))  


函数部分通过enumerate()对列表进行遍历,并通过max函数获取列表中的最大值,并通过循环在列表中查找,如果当前值等于最大值,则将下标存入列表中。

主函数部分先定义空列表,使用while循环读入数字并以-1结束,若输入值为-1则break出循环,若不为-1则存入列表中。完成列表元素读入后调用函数并输出。


(3)运行并测试


①开始运行程序,将提示输入数字并以-1结尾:


737320bf815b42feac68e6fa76641dec.png


54069502a4224d309a6913681ea70947.png

②完成输入后即输出结果:


6919903a47244b67b44fcd716b883b7c.png


2. 合并两个排序的列表


编写函数 merge(list1, list2),将两个排序好的整数列表合并到一个新的排序列表中,返回这个新的列表。

使用两种方法实现 merge 函数:

不使用 sort() 或 sorted();

使用 sort() 或 sorted()。


例子:

merge([2, 4, 7], [1,5,6]) # return [1, 2, 4, 5, 6, 7]


(1)具体思路


a.不使用 sort() 或 sorted()

分别通过变量记录两列表的第一个数字,比较两数大小,将较小的存入结果列表中并将该索引值加一,再次进行比较。按照以上规律一直循环操作下去,直至一列表中全部数字存入结果列表时,将另一列表中所有元素再依次存入结果列表。


b.使用 sort() 或 sorted()

通过’+’将两个列表合并后直接调用sort进行排序并输出。


(2)编程实现

# 使用sort进行排序  
def merge_with_sort(list1, list2):  
    res = list1+list2  
    res.sort()  
    return res  
# 不使用sort进行排序  
def merge_without_sort(list1, list2):  
    # 定义两列表初始索引  
    i = 0  
    j = 0  
    res = []  
    # 依次访问两序列进行排序  
    while i < len(list1) and j < len(list2):  
        # 比较当前索引大小  
        if list1[i] < list2[j]:  
            res.append(list1[i])  
            i = i+1  
        else:  
            res.append(list2[j])  
            j = j+1  
    # 如果序列一未完全放入结果序列中  
    if i < len(list1):  
        res.append(list1[i])  
        i = i+1  
    # 如果序列二未完全放入结果序列中  
    if j < len(list2):  
        res.append(list2[j])  
        j = j+1  
    return res  
# 主函数  
temp1 = []  
temp2 = []  
# 循环获取输入  
print("Please input numbers into the first list end with -1:")  
while True:  
    a = eval(input())  
    if a == -1:  
        break  
    temp1.append(a)  
print("Please input numbers into the second list end with -1:")  
while True:  
    a = eval(input())  
    if a == -1:  
        break  
    temp2.append(a)  
# 输出结果  
print(merge_with_sort(temp1, temp2))  
print(merge_without_sort(temp1, temp2))  


使用sort进行排序的函数通过先将两列表合并后,再利用sort进行排序。不使用sort进行排序的函数则先定义两列表的初始索引,指向列表的第一个元素。比较两列表当前索引值,将较小值存入结果列表并将索引值加一。依次循环至任一列表为空。则将另一不为空列表全部按顺序放入结果列表并返回。

主函数中通过依次获得两个列表的输入完成两列表的输入,并分别调用两函数以输出结果。


(3)运行并测试


①运行程序后将提示依次输出两列表的值并以-1结尾


777689f76801474482f88a0e75861856.png

87e5cb26944042f481a15b6fd8e3b335.png


②完成输入后即输出两个相同的排序结果:


b128216961e0449ab7f97848e0e8f223.png


3. 子列表


编写函数 match_pattern(list1, list2),仅当 list2 是 list1 的子列表时返回 True。


例子:

list1 = [4, 10, 2, 3, 50, 100]

list2 = [3, 2, 50]

list3 = [2, 3, 50]

list4 = [2, 3, 40]

match_pattern(list1, list2) # return False

match_pattern(list1, list3) # return True

match_pattern(list1, list4) # return False


(1)基本思路


通过迭代器进行判断元素是否都在母列表中进行判断子列表。


(2)编程实现

# 判断函数  
def match_pattern(list1, list2):  
    # 通过迭代器进行子序列判断  
    it = iter(list1)  
    return all(i in it for i in list2)  
# 主函数  
temp1 = []  
temp2 = []  
# 循环获取输入  
print("Please input numbers into the first list end with -1:")  
while True:  
    a = eval(input())  
    if a == -1:  
        break  
    temp1.append(a)  
print("Please input numbers into the second list end with -1:")  
while True:  
    a = eval(input())  
    if a == -1:  
        break  
    temp2.append(a)  
# 输出结果  
print(temp1)  
print(temp2)  
print(match_pattern(temp1, temp2))  

先创建对应迭代器,再通过迭代器依次判断是否迭代器的每个元素都在母列表中。

主函数中通过依次获得两个列表的输入完成两列表的输入,并分别调用函数以输出结果。

(3)运行并测试

①运行程序后将提示依次输出两列表的值并以-1结尾,接下来依次进行三组测试。

a.存在反序元素

004d28da3e864ba2bedce0d7eb5c845e.png

b.满足子序列:

224151869c5c4e1097bda73206f8225e.png

c.存在不在母列表的元素:

58a00d5456d54ceb8dd584f0f84e1772.png


相关文章
|
4天前
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
24 9
|
9天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
38 12
|
7天前
|
存储 人工智能 程序员
通义灵码AI程序员实战:从零构建Python记账本应用的开发全解析
本文通过开发Python记账本应用的真实案例,展示通义灵码AI程序员2.0的代码生成能力。从需求分析到功能实现、界面升级及测试覆盖,AI程序员展现了需求转化、技术选型、测试驱动和代码可维护性等核心价值。文中详细解析了如何使用Python标准库和tkinter库实现命令行及图形化界面,并生成单元测试用例,确保应用的稳定性和可维护性。尽管AI工具显著提升开发效率,但用户仍需具备编程基础以进行调试和优化。
137 9
|
7天前
|
算法 安全 网络安全
基于 Python 的布隆过滤器算法在内网行为管理中的应用探究
在复杂多变的网络环境中,内网行为管理至关重要。本文介绍布隆过滤器(Bloom Filter),一种高效的空间节省型概率数据结构,用于判断元素是否存在于集合中。通过多个哈希函数映射到位数组,实现快速访问控制。Python代码示例展示了如何构建和使用布隆过滤器,有效提升企业内网安全性和资源管理效率。
37 9
|
30天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
177 9
|
1天前
|
人工智能 数据库连接 开发工具
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
13 0
|
4月前
|
存储 安全 Serverless
Python学习四:流程控制语句(if-else、while、for),高级数据类型(字符串、列表、元组、字典)的操作
这篇文章主要介绍了Python中的流程控制语句(包括if-else、while、for循环)和高级数据类型(字符串、列表、元组、字典)的操作。
70 0
|
4月前
|
存储 JSON 数据处理
分析、总结Python使用列表、元组、字典的场景
分析、总结Python使用列表、元组、字典的场景
61 0
|
4月前
|
存储 自然语言处理 Java
【Python】列表和元组
【Python】列表和元组
36 0
|
6月前
|
存储 索引 Python
Python学习笔记----列表、元组和字典的基础操作
这篇文章是一份Python学习笔记,涵盖了列表、元组和字典的基础操作,包括它们的创建、修改、删除、内置函数和方法等。
Python学习笔记----列表、元组和字典的基础操作

热门文章

最新文章