1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| def inclatom(X,L2): # teste si un atome est inclus dans une liste aplatie
if L2==[]:
return False # aucun atome dans la liste vide
A=L2[0] # A est la tete de liste (car en lisp)
B=L2[1:] # B la queue (cdr en lisp)
if X==A: # si X est A OK!
return True
else:
return inclatom (X,B) # sinon tester si l'atome est dans la queue
def flat (L): # aplatit la liste en ne gardant que les atomes au plus bas niveau
if L==[]:
return L
A=L[0]
B=L[1:]
if A.__class__!=list:
return [A]+flat(B)
else:
return flat(A)+flat(B)
def inclist (L1,L2): # teste si tous les elements de la liste L1 se retrouvent dans la liste L2
P=flat(L1)
Q=flat(L2)
return all ([inclatom(X,Q) for X in P])
#programme principal
print inclist ([[1, 2],3],[ 4, 1, [5, 2, 3]]) |