Bonjour,
j'ai une liste :
H = [('2','4'),('5'),('3','1','2'),('4')]
Sauriez-vous comment faire, s'il vous plait, pour ajouter l'élément '6' au tuple ('3','1','2') situé dans la Liste H.
Par avance, merci.
Cordialement,
Arsène
Bonjour,
j'ai une liste :
H = [('2','4'),('5'),('3','1','2'),('4')]
Sauriez-vous comment faire, s'il vous plait, pour ajouter l'élément '6' au tuple ('3','1','2') situé dans la Liste H.
Par avance, merci.
Cordialement,
Arsène
Bonjour
Un tuple est par nature immuable, donc non modifiable. La seule façon donc de rajouter quelque chose à un tuple est de réécrire un nouveau tuple en prenant les éléments qui t'intéressent du premier => H[2]=H[2] + ('6',).
Et heureusement que H est lui une liste parce que si ça avait été un tuple lui aussi il aurait fallu utiliser la même astuce mais à un niveau supérieur (style H=H[:2] + (H[2] + ('6',),) + H[3:])
PS: Je ne sais pas si c'est exprès mais les éléments H[1] et H[3] ne sont pas des tuples mais de simples strings. C'est la virgule et non les parenthèses qui fait le tuple (tu remarqueras par exemple la virgule dans mon + ('6',)). Les parenthèses, même si elles sont fortement conseillées, ne sont pas obligatoires (enfin pas pour un tuple simple) => H = [('2', '4'), ('5',), ('3','1','2'), ('4',)].
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Merci beaucoup pour cette information. Je m'en vais donc utiliser un dictionnaire. Dans mon cas, ce sera plus simple. Les dictionnaires peuvent contenir des listes qui peuvent quant à elles être modifiées. Je peux ensuite convertir le dictionnaire en liste. Voici le code en python 3:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 H = {('2', '4'), ('5',), ('3','1','2'), ('4',)} Hlist = [] for key, value in H.items(): Hlist.append(value) print(Hlist)
Hum, je suis dubitatif quant à cette conclusion. On n'utilise pas un dictionnaire parce qu'il sera plus simple mais parce qu'il sera le mieux adapté à son algo. Si tu dois traiter tes éléments un par un, alors une liste/tuple. Si maintenant tu dois identifier les éléments par une étiquette alors oui un dictionnaire est plus approprié. C'est comme si tu disais "je n'arrive pas à utiliser ce tournevis, je vais donc utiliser une perceuse ce sera plus simple" alors qu'on ne sait même pas si tu veux visser ou percer un trou (ou même, pourquoi pas, planter un clou). Ce serait mieux si tu disais "j'ai une vis à faire entrer, que dois-je utiliser et comment". Bref le dictionnaire n'est pas un but mais un outil.
Euh je te rappelle que ton "H" du début est une liste donc il est lui-aussi modifiable (ma première solution modifiait H[2]). Et tu aurais pu remplacer les tuples qu'il contenait par des listes qui auraient été elles-aussi modifiables !!!
Ex:
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 H = [['2', '4'], ['5',], ['3', '1', '2'], ['4',]] H[2].append('6')
Et si tu remplis ton dictionnaire de tuples, tu resteras avec le même souci => tu ne pourras pas modifier ses éléments. Bref une liste de tuples ou un dictionnaire de tuples ne change rien => les tuples restent immuables !!!
Là je ne peux que te conseiller de réouvrir ton cours Python au chapitre où on explique la syntaxe d'un dictionnaire. H={key1 : value, key2 : value, etc}.
Oui en effet, arrivé là on peut se demander pourquoi faire simple...
Juste pour que tu constates bien la différence entre le "Hlist" de ce code et le "H" de ton premier code...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 H = {1 : ('2', '4'), 2 : ('5',), 3 : ('3', '1', '2'), 4 : ('4',)} Hlist = [] for value in H.values(): Hlist.append(value) print(Hlist) H=[('2', '4'), ('5', ), ('3', '1', '2'), ('4', )] print(H == Hlist)
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
J'étais en train de faire un programme ayant pout but de créer une liste qui contient elle-même des listes. Ces sous-listes, que je crée en utilisant random et que j'insère au fur et à mesure dans ma liste principale, sont constituées d'un ou de plusieurs éléments.
J'aurai pu en effet éviter d'utiliser un dictionnaire et avoir 2 lignes de code en moins :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 nombreElements = random.randint(20,30) # je choisis le nombre d'éléments de mon dictionnaire (ou de la liste principale) print(nombreElements) for myL in range(1,3): # je fais une boucle pour créer 2 listes H = {} # je crée un dictionnaire for x in range(1, nombreElements): # pour chaque élément de mon dictionnaire : nbreEleInTuple = random.randint(2,5) # je choisis un nombre au hasard (entre 2 et 5) K = [] # je crée une liste for y in range(1, nbreEleInTuple): # j'ajoute X (nbreEleInTuple) éléments à cette liste ChiffreInTuple = random.randint(1,9) # Ces éléments qui ne sont autre qu'une série de chiffres générés au hasard K.append(ChiffreInTuple) # que j'ajoute un à un à la liste H[x] = K # j'ajoute la liste en tant qu'élément de mon dictionnaire Hlist = [] # je crée une liste for key, value in H.items(): # j'ajoute à ma liste toutes les valeurs de mon dictionnaire Hlist.append(value) if myL ==1: # si 1er tour de boucle E = Hlist # je crée la liste E elif myL==2: # si 2ème tour de boucle F = Hlist # je crée la boucle F
Merci beaucoup pour ces réflexions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #H = {} # je crée un dictionnaire Hlist = [] # je crée une liste for x in range(1, nombreElements): nbreEleInTuple = random.randint(2,5) K = [] for y in range(1, nbreEleInTuple): K.append(LettreInTuple) #H[x] = K # j'ajoute la liste en tant qu'élément de mon dictionnaire Hlist.append(K) # j'ajoute la liste temporaire K en tant qu'élément de ma liste Hlist #for key, value in H.items(): #Hlist.append(value)
Déjà grosse différence avec ton premier post (là c'était une liste qui contenait des tuples). Alors ? Où est le bon code ??? Tu aurais utilisé dès le départ des listes de listes tu n'aurais jamais eu de souci d'ajout...
Ca ne se compte pas en lignes de code (d'autant plus que moi je compte non pas 2 lignes mais 4 lignes en moins) mais en adéquation des outils face au problème qu'ils doivent résoudre. Sinon on tombe dans le gag de Kaamelott saison2 épisode 25 où Séli tente de choper une souris au maillet et Léodagan lui rétorque "Oui au maillet ou au tir à l'arc l'important c'est le résultat. Vous avez essayé la catapulte ?"
Là tu crées un dico où les clefs sont des indices séquentiels. Donc en dehors qu'un dico est plus lourd qu'une liste (print sys.getsizeof(dict()), sys.getsizeof(list())) et que l'ordre des éléments restitués n'est pas garanti à l'identique de l'ordre des éléments insérés (donc là déjà dès le départ le dico ne part pas immédiatement vainqueur dans la comparaison) je ne vois pas de différence face à une liste...
N'oublie pas la philosophie Python...
- Beautiful is better than ugly.
- Explicit is better than implicit.
- Simple is better than complex.
- Complex is better than complicated.
Méfies-toi de ce type d'instruction (E=Hlist) car je ne suis pas certain que tu saches ce que ça fait réellement. Essaye par exemple de rajouter E[1]="toto" puis affiche ensuite F. De plus je ne vois pas trop la raison d'être du elif...
PS: pour t'éviter ensuite de chercher: E=Hlist[:].
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Partager