Fonction décalage
Lou
-
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dois rédiger une fonction qui, à partir d'une liste L = [a,b,c], renvoie L = [b,c,a].
Voici le programme que j'ai rédigé :
Or, quand j'exécute ma fonction dans le Shell, elle ne renvoie rien ...
Merci de votre aide !
Je dois rédiger une fonction qui, à partir d'une liste L = [a,b,c], renvoie L = [b,c,a].
Voici le programme que j'ai rédigé :
def decalage(L) :
return L.append(L.pop(0))
Or, quand j'exécute ma fonction dans le Shell, elle ne renvoie rien ...
Merci de votre aide !
Configuration: Macintosh / Safari 13.0.5
9 réponses
-
Bonsoir,
La fonctionappend
ne retourne rien, elle fait simplement une modification de la liste. Voilà pourquoi tu n'as rien en sortie. -
Bonjour Lou,
pourquoi ne pas créer une 2eme liste ?
L2 = [L[k] for k in range(len(L)-1,-1, -1)]
-
Bonjour Phil_1857,
Ce ne me semble pas une bonne idée. Vous indiquez une inversion de liste, alors que Lou souhaite faire une permutation circulaire. Son idée de départ me parait d'ailleurs pertinente. -
Bonjour Furansujean,
Mais oui, tu as raison, quel blaireau je fais ! J'ai lu trop vite !
Allez hop, copie à revoir ! :-) -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ça arrive, même aux meilleurs ! :-)
-
On peut décomposer, alors:
L = ['a','b','c'] s = L.pop(0) L.append(s)
Là, on obtient bien L = b,c,a-
Mais à ce stade , si je convertis ce script en fonction , je vais avoir le même problème : à la sortie je ne vais rien avoir de renvoyé car la liste aura été modifiée en place ?
En fait j’ai besoin que cette fonction me renvoie une liste (car je l’utilise ensuite dans un autre programme plus conséquent) -
-
-
L = ['a','b','c'] def decalage(L): L2= [L[k] for k in range(len(L))] L2.append(L2.pop(0)) return(L2) L2 = decalage(L)
-
C'est vrai !
import copy def decalage(liste_a_decaler): ''' Renvoie une liste qui est la permutation circulaire de celle passée en argument ''' liste_decalee = copy.copy(liste_a_decaler) liste_decalee.append(liste_decalee.pop(0)) return(liste_decalee) L = ['a','b','c'] L2 = decalage(L) print(L2) #imprime ['b', 'c', 'a']
-
Bonsoir Lou,
La réponse de Phil_1857 répond-elle à ta question ? Si oui, je te propose de marquer le sujet comme "Résolu".
Remarques :
1. Si la listeliste_a_decaler
est plate (ce qui est le cas de l'exemple donné) c'est-à-dire qu'elle ne contient pas de sous-liste, alors on peut se passer du modulecopy
importé.
Pour une copie de liste on peut faire :liste_decalee = liste_a_decaler.copy()
Il s'agit alors d'une "copie superficielle".
2. Je sors un peu du sujet, mais à noter : si la liste contient des sous-listes, du genre[['a',1],['b'],'c',0.5]
alors il faut utiliser une "copie profonde" :import copy #... liste_decalee = copy.deepcopy(liste_a_decaler)
La vidéo suivante explique très bien ce point : https://www.youtube.com/watch?v=I3dbeflpI-Q