Если вы должны сделать это без библиотек и ваши списки отсортированы, вы можете выполнить сопоставление с помощью итератора. Переходите ко второму набору, одновременно продвигая первый, когда значения совпадают. Вы будете знать, что первый список является подмножеством второго, если вы пройдете через все это (используя итератор)
def isSubset(setA,setB):
iterA = iter(setA)
valueA = next(iterA,None)
for valueB in setB:
if valueA == valueB:
valueA = next(iterA,None)
return valueA is None
a=[3,4,5,5]
b=[3,4,5,6,7,8,9]
print(isSubset(a,b)) # False
c=[3,4,5,5,5,6,7,8,9]
print(isSubset(a,c)) # True
d=[3,4,5,5,5,6,7]
print(isSubset(b,d)) # False
, если списки не гарантированы для сортировки, вы можете отсортировать их в начале функции, добавив:
setA,setB = sorted(setA),sorted(setB)
, если вы хотите сделать это быстрее, вы можете добавить условие для выхода из l oop, как только достигнут конец setA или когда значение в наборе B больше текущего значения набора A:
# at beginning of for loop:
if valueA is None or valueB > valueA: break