Je suis bloqué depuis un certain temps sur certains apprentissages en ligne que j'essaye.
J'ai besoin de créer une liste de listes vides en utilisant la récursivité.
La chose étrange est que je pensais comprendre un algorithme factoriel (pour lequel il y a beaucoup d'aide) mais pas avec ceci et comme un résultat, il ne renvoie toujours que le seul [].
Par exemple, si n = 4 alors je m'attendrais à [[], [], [], [] ]
def listOfLists(n):
lists = []
if i <= 1:
return lists
else:
lists += lists.append([])
listOfLists(n-1)
7 Réponses :
Vous pouvez faire ceci:
[[], [], [], []]
Le résultat est:
def listoflist_func(n, currentList=[]):
if n < 0:
return "Error: n must be > 0"
elif n==0:
return currentList
else:
currentList.append([])
return listoflist_func(n-1, currentList)
print listoflist_func(4)
Le meilleur
Merci Macouille mais je dois utiliser la récursivité dans cette méthode particulière.
J'ai mis à jour ma réponse, srry
Vous n'utilisez pas la réponse de votre appel récursif, essayez de comprendre ce code (j'ai essayé de garder le formulaire similaire au vôtre):
Call - listOfLists(3) Call - listOfLists(2) Call - listOfLists(1) Return [[]] # From listOfLists(1) Return [[]] + [[]] # From listOfLists(2) Return [[]] + [[],[]] # From listOfLists(3)
Ceci écrit "sec- run "peut vous aider à le comprendre (pour listOfLists(3)):
def listOfLists(n):
lists = [[]]
if n <= 1:
return lists
else:
return lists + listOfLists(n-1)
Je vous remercie. Cela fonctionne un régal, je vais maintenant passer en revue toutes mes versions précédentes pour déterminer où je me suis trompé.
Une autre variante à considérer. Cela utilise un argument supplémentaire avec une valeur par défaut.
def listOfLists(n, lists = []):
if n > 0:
lists.append([])
return listOfLists(n-1, lists)
else:
return lists
print(listOfLists(4))
La fonction récursive a déjà été donnée dans d'autres réponses, je veux expliquer pourquoi votre code ne fonctionne pas comme prévu. Le coupable est cette ligne:
x = [1,2,3] y = x.append(4) print(y) #None print(x) #[1, 2, 3, 4]
à la place, elle devrait être:
lists = lists+[[]]
ou alternativement:
lists.append([])
Si vous devez utiliser la récursivité pour résoudre un problème mieux adapté à la répétition, vous pouvez le faire. Je suis resté aussi proche de votre original que je le pouvais raisonnablement.
def listOfLists(n):
if n <= 0:
return []
else:
return [ [] ] + listOfLists(n-1)
>>> listOfLists(4)
[[], [], [], []]
def listOfLists(n,lists=[]):
lists.append([])
if n == 1:
return
listOfLists(n-1,lists)
return lists
print (listOfLists(4))
result: [[], [], [], []]
Il existe d'excellentes réponses récursives publiées, cependant, il est également possible d'utiliser des générateurs avec récursivité:
[[], [], [], []]
Sortie:
def listOfLists(n):
if n:
yield []
yield from listOfLists(n-1)
print(list(listOfLists(4)))
p >
Merci, mais je ne suis pas encore arrivé à quelque chose comme ça mais sans aucun doute ce sera utile.
C'est là que je me suis mis dans une torsion. Sur cette tentative particulière, j'ai essayé de commencer par le for, mais sur mes autres tentatives, il a juste commencé avec des instructions if.
Merci BoarGules mais je dois utiliser la récursivité dans cette méthode particulière.
J'ai failli ne pas publier car j'ai entendu beaucoup de choses négatives sur les réponses sur SO. Alors avant de poster, j'ai lu ceci et je me suis mis à l'aise. stackoverflow.blog/2018/04 / 26 /…
SO peut certainement être accueillant, tout ce que nous demandons, c'est que les utilisateurs mettent un certain effort pour résoudre le problème par eux-mêmes avant de venir ici, en fournissant en outre toutes les informations nécessaires dans la question elle-même, y compris le code, le problème rencontré, ce que vous J'ai essayé, ce que vous essayez de faire, quels résultats vous attendez, quels résultats vous obtenez à la place, etc. Si vous êtes intéressé, je vous suggère de lire l'article de blog de Jon Skeet sur écriture de la question parfaite (C'est assez une lecture mais il contient quelques points intéressants)