Bonsoir je bute en python sur une boucle for et un slice
Je veux parcourir un tableau par séquence avec un slice délimité par i:j je ne vois pas comment l’écrire en python
J’ai farfouiller sur le net je me suis perdu
Merci d’avance
Bonsoir je bute en python sur une boucle for et un slice
Je veux parcourir un tableau par séquence avec un slice délimité par i:j je ne vois pas comment l’écrire en python
J’ai farfouiller sur le net je me suis perdu
Merci d’avance
Bonjour
Et tu n'as pas farfouillé dans un tutoriel Python ?
Accessoirement je ne vois pas le rapport entre ta demande et ton titre (où est la séquence? où est la redondance?). Autant les titres très généralisés tels que "problème Python" ou "j'y arrive pas" c'est nul, autant les titres spécifiques mais dont la spécificité indiquée n'a rien à voir avec le topic lui-même c'est tout aussi nul.
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tab=..... (une liste de trucs) ..... for i in range(0, len(tab), 5): print(tab[i:i+5])
merci j'y avais pensé a cette implémentation , autant pour moi je cherche a programmer une bande qui parcourt le texte avec des slices
je suis novice avec les slices et la syntaxe python j'ai eté stresse de voir des slice indicé d'ou mon appel au secours
merci pour votre aide
Salut !
Je ne sais pas trop si tu utilises numpy ou pas mais voici un exemple :
https://pyspc.readthedocs.io/fr/latest/05-bases/08-tableaux_numpy.html#Parcourir-le-contenu-d'un-tableau-numpy
Sinon j'ai pensé que set() pourrait peut-être t'aider :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >>> list1 = [1,2,3,4,5,6] >>> list2 = [4,5,6,7,8,9] >>> set(list2) & set(list1) {4, 5, 6} >>> set([1,2,1,5,1,1,2,2,4,2,3]) {1, 2, 3, 4, 5}
Comment tu verrais ça pour trouver une redondance ??? set(list1) & set(list2) fait ressortir les éléments communs à "list1" et "list2" mais "élément commun" ne signifie pas "redondance"...
Mouais... le "1" et "2" sont manifestement redondants mais ta solution ne les fait pas ressortir tant que ça... Ou alors on ne parle pas de la même "redondance"...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 t=[1,2,1,5,1,1,2,2,4,2,3] [x for x in set(t) if t.count(x) > 1] [1, 2]
Merci beaucoup j'ai trouve un code source qui m'as aide mais je bute sur savefig a quel endroit et ou dois je stocker cet image et pourquoi rien ne s'affiche? pour information le code fonctionne sur linux
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 import random import matplotlib.pyplot as plt def isprefixe(texte,mot,i): B = True j = 0 while (j < len(mot)) and B: if texte[i+j] != mot[j]: B = False j +=1 return B def cherche_occurrences(texte, mot): occ = [] # liste des occurrences for i in range(len(texte)-len(mot)+1): if isprefixe(texte,mot,i): occ.append(i) return occ def texte_alea(n): lettres = "abcdefghijklmnopqrstuvwxyz" texte = "" for i in range(n): texte = texte + lettres[random.randint(0,25)] return texte def texte_alea2(n): texte= "" for i in range(n): texte += random.choice("abcdefghijklmnopqrstuvwxyz") return texte #print({}.format(nombre_moyen_apparition(10000,llg,1000))) def nombre_moyen_apparition(n,mot,m): compteur = 0 for i in range(m): texte = texte_alea2(n) compteur += len(cherche_occurrences(texte,mot)) return compteur / m X=[] Y=[] for n in range (200,30000,200): X.append(n) Y.append(nombre_moyen_apparition(n,mot,m)) plt.plot(X,Y) plt.savefig(pb_py003-fig1.eps) plt.show()
Et tu l'as étudié ce code source où tu l'as juste recopié sans y rien piger?
Il n'y a rien qui te choque dans cette fonction? Style un incrément qui ne se fait que sous certaine condition (boucle infinie si la condition n'arrive pas)...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 def isprefixe(texte, mot, i): return texte[i:len(mot)+i] == mot
Un peu pareil. Un return dès la première itération, on peut se demander à quoi sert donc la boucle !!!
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 import string def texte_alea(n): return "".join(random.sample(string.ascii_lowercase, n))
Mouais ok. On est en droit de se demander où t'as trouvé cette bouse. Mais de ton côté si tu ne sais pas lire une boucle, commence par apprendre Python quoi.
j'ai récuperé ce code a cet adresse http://alain.troesch.free.fr/2015/Fi.../corrinfo8.pdf en python je maitrise uniquement les listes les tuples et les dictionnaires et sickit learn a premier impression je n'ai rein compris a ce code d'ou mon appel au secour
Salut,
Les exercices associés à un cours n'ont pour but que de vous faire pratiquer les notions abordées dans le chapitre correspondant.
C'est rarement du bon Python puisqu'on vous force à comprendre des constructions élémentaires qu'on écrit peu souvent (en dehors de ces cours pour débutant).
Maintenant, si vous voulez apprendre à programmer, il ne faut pas juste récupérer la solutions des exercices mais essayer de les faire par vous même en vous aidant du contenu du cours.
- W
Oui, ben c'est ça. Ton code...
... ne correspond pas à ce code...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def isprefixe(texte,mot,i): B = True j = 0 while (j < len(mot)) and B: if texte[i+j] != mot[j]: B = False j +=1 return B
...présenté dans le document que tu cites. Et tout le reste est à l'avenant. T'as effectivement recopié sans y rien piger. Et tu ne sais même pas à quoi servent les indentations en Python, alors que c'est la toute première chose qu'on apprend !!!
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def isprefixe(texte,mot,i): B = True j = 0 while (j < len(mot)) and B: if texte[i+j] != mot[j]: B = False j +=1 return B
Généralement la "maitrise" de ces éléments passe au préalable par la "maitrise" des boucles... mais admettons.
Malheureusement on ne pourra pas apprendre Python à ta place. Enfin si, on pourrait réécrire ici la base d'un programme Python (les indentations, les boucles, etc) mais puisque c'est déjà écrit dans les tutos...
je savais developpe en python en 2012 mais avec l'age j'ai oublie je suis plus algorithmicien mainteant et theoricien j'ai perdu de ma verve c'est la vie
en tout cas merci ce qui me bloque c'est juste la ligne savefig quand je regarde la librairie ils parlent du nom du fichier pas du chemin ou est stocker le fichier
je ne comprends pas ce que fais la fonction
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 def nombre_moyen_apparition(n,mot,m): compteur = 0 for i in range(m): texte = texte_alea2(n) compteur += len(cherche_occurrences(texte,mot)) return compteur / m X=[] Y=[] for n in range (200,30000,200): X.append(n) Y.append(nombre_moyen_apparition(n,mot,m)) plt.plot(X,Y) plt.savefig(comparaison.png) plt.show()
Salut
Le répertoire dans lequel est stocké le fichier est le répertoire courant (du processus utilisateur). Ce qui n'a rien à voir avec la programmation (mais avec le système de fichier, le répertoire par défaut,...)
- W
Un "nom de fichier" implique toujours son chemin. Si je parle de "/etc/passwd", il s'agit du fichier "passwd" situé dans le dossier "/etc" (nom absolu). Si je parle de "etc/passwd" il s'agit du fichier "passwd" situé dans un dossier "etc" situé lui-même dans le dossier où je me trouve au moment où je lance la commande (nom relatif). Et si je parle de "passwd" il s'agit du fichier "passwd" situé dans le dossier où je me trouve au moment où je lance la commande (équivalent de "./passwd" avec dossier "." mis par défaut). Là encore un nom relatif. Et cela n'est pas une notion Python mais une notion OS (savoir nommer/repérer un fichier dans son OS).
le plus simple pour résoudre le problème initial est de programmer une bande avec des slices que l'on fait traverser sur le texte le problème est peut on considérer les slices comme une bande de parcours
et comment l'écrire j'ai l'algo mais concrètement et syntaxiquement je bute
Salut,
Vous n'avez jamais décrit le problème a résoudre, vous râler juste de ne pas arriver à écrire la solution que vous envisagez...
Et le code que Sve@r a déjà posté ne le fait pas, c'est que ce n'est peut être pas si simple. Peut être faudrait-il commencer avec ce qu'on a au départ et ce qu'on cherche à obtenir sur un ou plusieurs exemples simples?
- W
Heureusement qu'en dehors de la syntaxe tu maitrises le reste
Je pense qu'une regex intelligente fera 3 fois mieux en 3 fois moins de ligne mais j'ai la flemme de la chercher (JurassicPork?)
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 def redondance(pattern, texte): cpt=0 l=len(pattern) for i in range(len(texte) - l + 1): if texte[i:i+l] == pattern: cpt+=1 return cpt print(redondance("abc", "tototabctotoabc"))
Python sait déjà faire çà très bien:
"compter les occurrences d'une chaine de caractères dans une autre" est si simple à dire que c'est pas sur que c'est ce que cherche à faire le PO...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> "tototabctotoabc".count('abc') 2 >>>
Après comment faire çà avec Python, c'est d'abord un algo. et personnellement, si je ne connaissait pas "count", j'écrirai cela plutôt sous la forme d'un automate:
note: pas testé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def redondance(pattern, texte): count = 0 n = len(pattern) ix = 0 for c in texte: if c == pattern[ix]: ix += 1 if ix == n: count += 1 ix = 0 elif ix != 0: ix = 0 return count
- W
salut,
un exemple d'extraction des occurrences avec recouvrement via une regex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 >>> import re >>> occurrences = lambda texte, mot: re.findall(r'(?=({}))'.format(mot), texte) >>> occurrences("abbabba", "abba") ['abba', 'abba']
Zut, en plus j'avais utilisé count() dans ce même topic mais là j'y ai pas pensé. Ceci dit, comme le PO avait parlé de "bandes de slices" ça a été la vision qui s'est imposée: un slice glissant.
Ouais mais comme avec lui rien ne semble simple...
En fait c'est nécessaire si on ne connait pas non plus le slice. Sinon mon algo suffit
Pas besoin. Tant que la lettre en cours correspond à la lettre de l'indice intermédiaire on incrémente l'indice et si l'indice atteint la longueur du pattern on a trouvé une occurence. Et si entre temps la lettre diffère on remet l'indice intermédiaire au début. Ca semble cohérent.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager