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


相关文章
|
6天前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
48 20
|
20天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
92 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
26天前
|
索引 Python
Python列表
Python列表。
47 8
|
28天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
33 9
|
1月前
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
64 14
|
23天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
60 0
|
8月前
|
测试技术 Python
Python中的装饰器应用与实践
在Python编程中,装饰器是一种强大的工具,能够优雅地扩展和修改函数或方法的行为。本文将深入探讨Python中装饰器的作用、原理以及实际应用场景,帮助读者更好地理解并运用装饰器提升代码的可维护性和灵活性。
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
2月前
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###
|
7月前
|
数据采集 数据可视化 大数据
Python在大数据处理中的应用实践
Python在大数据处理中扮演重要角色,借助`requests`和`BeautifulSoup`抓取数据,`pandas`进行清洗预处理,面对大规模数据时,`Dask`提供分布式处理能力,而`matplotlib`和`seaborn`则助力数据可视化。通过这些工具,数据工程师和科学家能高效地管理、分析和展示海量数据。
344 4