Python编程题13--判断两个升序列表,其中一个是另外一个的

2020-10-08  本文已影响0人  wintests

题目

已知两个升序列表A、B,列表A的元素个数要小于列表B,请判断列表A是否是列表B的子集,如果是则返回 True ,否则返回 False 。

如果列表A是列表B的子集,需要满足以下两个条件:

实现思路1

这里我们运用 Python 里面 集合 的 issubset() 方法来处理问题。

注意:因为集合是不包含重复元素的,如果列表A或列表B包含重复元素,那么转换为集合时会进行去重,也就不能直接使用 issubset() 方法来实现。

代码实现

def is_sub_set(short_list, long_list):
    set1, set2 = set(short_list), set(long_list)
    return set1.issubset(set2)

# 列表A和列表B不包含重复元素    
A = [1, 2, 4, 5]
B = [1, 2, 3, 4, 5, 6, 7]
print(is_sub_set(A, B))

实现思路2

代码实现

def is_sub_set(short_list, long_list):
    len1, len2 = len(short_list), len(long_list)
    x, y = 0, 0
    while x < len1 and y < len2:
        if short_list[x] == long_list[y]:
            x += 1
            y += 1
        elif short_list[x] > long_list[y]:
            y += 1
        else:
            return False
    return True if x == len1 else False
        
A = [1, 2, 3, 3, 4, 5]
B = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
print(is_sub_set(A, B))

实现思路3

代码实现

def is_sub_set(short_list, long_list):
    len1, len2 = len(short_list), len(long_list)
    m = 0
    flag = False
    for i in range(len2):
        if long_list[i] == short_list[0]:
            m += 1
            if m == len1:
                flag = True
                break
            del short_list[0]
    return flag

A = [1, 2, 3, 3, 4, 5]
B = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
print(is_sub_set(A, B))

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

上一篇下一篇

猜你喜欢

热点阅读