The Question is: You are to write a function, called isSublist()
, which takes two arguments (list, sublist
) and returns 1
if sublist is a sub-list of list, and 0 otherwise.
So i have my code however I get True
when the sublist is not in list. Any suggestions on fixing this please?
def isSublist(list, sublist):
for i in range(len(list)-(len(sublist))+1):
return True
if sublist==list[i:i+(len(sublist))]:
return False
sample input:
list= (0,1,2,3,4,5,6,7,8,9)
isSublist(list, [1,2,3])
output:
True
You can break this up by getting all the slices the size of the sublist, and comparing equality:
def n_slices(n, list_):
for i in xrange(len(list_) + 1 - n):
yield list_[i:i+n]
def isSublist(list_, sub_list):
for slice_ in n_slices(len(sub_list), list_):
if slice_ == sub_list:
return True
return False
To cover the issue of ordering. A list is, by definition, ordered. If we want to ignore ordering, you can do sets:
def isSubset(list_, sub_list):
return set(sub_list) <= set(list_)
If we need to cover repeated elements and ignore ordering, you're now in the realm of multisets:
def isSubset(list_, sub_list):
for item in sub_list:
if sub_list.count(item) > list_.count(item):
return False
return True