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


相关文章
|
5天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
22 1
|
1天前
|
机器学习/深度学习 人工智能 算法
机械视觉:原理、应用及Python代码示例
机械视觉:原理、应用及Python代码示例
|
2天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
7 0
|
3天前
|
算法 数据挖掘 数据处理
使用 Python 循环创建多个列表
在Python中,动态创建多个列表对于数据处理和算法实现十分有用。本文介绍了四种方法:1) 列表推导式,如创建偶数和奇数列表;2) 使用循环和`append()`,示例为生成斐波那契数列;3) 结合字典与循环,按条件(如正负数)分组;4) 列表生成器,用于一次性生成多组随机数列表。这些方法有助于提高代码效率和可读性。
14 1
|
5天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
12 1
Flask框架在Python面试中的应用与实战
|
6天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python构建简单的图像识别应用
本文将介绍如何利用Python语言及其相关库来构建一个简单但功能强大的图像识别应用。通过结合OpenCV和深度学习模型,我们将展示如何实现图像的特征提取和分类,从而实现对图像中物体的自动识别和分类。无需复杂的算法知识,只需一些基本的Python编程技巧,你也可以轻松地创建自己的图像识别应用。
|
8天前
|
数据挖掘 vr&ar Python
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
34 10
|
9天前
|
机器学习/深度学习 数据采集 供应链
从数据到决策:scikit-learn在业务分析中的应用
【4月更文挑战第17天】本文探讨了scikit-learn在业务分析中的应用,包括数据预处理、分类、回归和聚类模型的构建,以及模型评估与优化。通过使用scikit-learn,企业能有效处理数据、预测趋势、客户细分并制定决策,从而提升经营效率和市场策略。随着机器学习的发展,scikit-learn在业务分析领域的潜力将持续释放,创造更多价值。
|
9天前
|
机器学习/深度学习 算法
scikit-learn在回归问题中的应用与优化
【4月更文挑战第17天】本文探讨了scikit-learn在回归问题中的应用,介绍了线性回归、岭回归、SVR和决策树回归等算法,并提出优化策略,包括特征选择、超参数调优、交叉验证和集成学习。通过实践案例展示如何处理房价预测问题,强调了根据问题特点选择合适方法的重要性。
|
9天前
|
算法 Serverless 计算机视觉
SciPy的科学计算库的基础知识与应用
【4月更文挑战第17天】**SciPy**是Python的开源科学计算库,基于NumPy,包含优化、积分、线性代数、信号处理等模块。本文介绍了SciPy的基本使用,如线性代数(矩阵运算、特征值)、优化(最小化问题)、积分以及信号处理(滤波)。安装SciPy可使用`pip install scipy`。此外,还展示了图像处理和常微分方程求解的例子。SciPy是科学计算的重要工具,适用于各种数值问题。参考文献包括SciPy和NumPy官方文档。