【Python程序设计】列表、元组的应用

Alex_Shen
2021-08-22 / 0 评论 / 0 点赞 / 73 阅读 / 2,035 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Problem 1:查找最大元素的索引

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

def indexOfLargestElement(list):
    ans = []
    for x in range(len(list)):
        if list[x] == max(list):
            ans.append(x)
    return ans

print(indexOfLargestElement([2, 1, 3, 1, 3]))

在这里插入图片描述

Problem 2:合并两个排序的列表

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

def merge_1(list1, list2):
    list1.extend(list2)
    list1.sort()
    return list1

def merge_2(list1, list2):
    ans = []
    while list1 and list2:
        if list1[0] > list2[0]:
            ans.append(list2[0])
            del list2[0]
        else:
            ans.append(list1[0])
            del list1[0]
    if len(list1) > 0:
        ans.extend(list1)
    elif len(list2) > 0:
        ans.extend(list2)

return ans

print(merge_1([2, 4, 7, 8, 11], [1, 4, 5, 6]))
print(merge_2([2, 4, 7, 8, 11], [1, 4, 5, 6]))

在这里插入图片描述

Problem 3:子列表

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

def match_pattern(list1, list2):
    if len(list2) > len(list1):
        return False
    for i in range(len(list1)-len(list2)+1):
        if list1[i:i+len(list2)] == list2:
            return True
    return False

list1 = [4, 10, 2, 3, 50, 100]
list2 = [3, 2, 50]
list3 = [2, 3, 50]
list4 = [2, 3, 40]
print(match_pattern(list1, list2))
print(match_pattern(list1, list3))
print(match_pattern(list1, list4))

在这里插入图片描述

Problem 4. 模式识别-四个连续相等的数字

编写函数 isconsecurivefour(list1),用于测试列表 list1 中是否有四个连续相等的数字。编写测试程序,提示用户输入一系列整数,返回 True/False,表示是否包含四个连续相等的数字。

def isconsecurivefour(list1):
    for i in range(len(list1)-3):
        if list1[i:i+4].count(list1[i]) == 4:
            return True
    return False

list = input().split(',')
list = [int(list[i]) for i in range(len(list))]
if isconsecurivefour(list):
    print("包含四个连续相等的数字")
else:
    print("不包含四个连续相等的数字")

在这里插入图片描述
在这里插入图片描述

Problem 5. “几乎对称”列表

如果在一个非对称列表中,我们交换任意两个元素之后,列表是对称的,则把这个列表称为“几乎对称”列表。例如,列表 lst=[1, 2, 1, 2]是几乎对称的,因为交换 lst[2]和 lst[3]之后,得到对称的列表[1, 2, 2, 1]。编写函数 is_almost_symmetric(lst), 仅当列表 lst 是几乎对称列表时,返回 True。

def is_almost_symmetric(list1):
    if list1 == list1[::-1]:
        return False, None, None
    for i in range(len(list1)):
        for j in range(i+1, len(list1)):
            temp = list1[:]
            temp[i], temp[j] = temp[j], temp[i]
            if temp == temp[::-1]:
                return True, i, j
    return False, None, None

list1 = [1, 2, 2, 3, 7, 1]
bool, i, j = is_almost_symmetric(list1)
if bool:
    print("{}是“几乎对称”列表,交换第{}和第{}个元素".format(list1, i+1, j+1))
else:
    print("{}不是“几乎对称”列表".format(list1))

在这里插入图片描述
在这里插入图片描述

0

评论区