Quelle est ta méthode pour faire cela ?transfert des données entre la feuille de calcul et le python.
Quelle est ta méthode pour faire cela ?transfert des données entre la feuille de calcul et le python.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
voici le code pour prendre les données sur la feuille , faire le traitement pour une suite de n éléments et afficher les résultats sur la feuille :
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 def calculSuite(n): #ODOC.NamedRanges.getByName("ListeResultats").getReferredCells().clearContents(31) plage = ODOC.NamedRanges.getByName("ListeNombres").getReferredCells() # on récupere la liste des nombres en une seule fois valeurs = plage.getDataArray() maListe = [] for valeur in valeurs: maListe += find_incremental_sequence(list(valeur), n) result = count_and_order_tuples(maListe) listres=[] for tpl, count in result: listres.append([str(tpl),count]) sheet = ODOC.CurrentController.ActiveSheet cursor = sheet.createCursorByRange(sheet.getCellByPosition(10 + (n-3)*2,1)) cursor.collapseToSize( len(listres[0]) , len(listres) ) cursor.setDataArray(listres)
Dans le traitement en plus de la fonction dont il est question dans cette discussion, on met tous les tuples dans une liste et on classe par nombre de fois qu'un tuple est présent( count_and_order_tuples) et on va mettre dans 2 colonnes de la feuille, les tuples sous forme de chaine et dans la colonne à côté le nombre de fois qu'il est présent.
En fait les fonctions getDataArray() et setDataArray() ne sont pas si lentes que cela car pour 4000 lignes de 10 nombres le temps d'exécution est de 60 ms par appel. C'est plutôt le temps d'affichage dans la feuille qui prend du temps ( quelques secondes).
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Mieux la liste comprehension
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part maListe = [find_incremental_sequence(list(valeur), n) for valeur in valeurs]
Code : Sélectionner tout - Visualiser dans une fenêtre à part listres = [[str(tpl), count] for tpl, count in result]Pour cela on pourrait limiter le nombre d'opérations d'écriture si possible. Plutôt que ligne par ligne, tu gardes en mémoire les données à écrire et tu écris le tout en une seule opération.C'est plutôt le temps d'affichage dans la feuille qui prend du temps ( quelques secondes).
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
plus classique du coup, aucune idée des perfs:
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 def foo(l,n): n -= 1 ln = len(l)-n e = 1 idx = 0 out = [] while e<ln: if l[e-1]==l[e]-1: idx += 1 if idx == n: out.append((*l[e-n:e+1],)) idx = 0 e+=1 else: idx = 0 e+=1 return out
Oui c'est ça. J'ai bien vu certains soucis (surtout la récursivité) mais c'est le onliner qui est magnifique
Oui enfin j'ai pas non plus inventé l'eau tiède. Je me suis contenté d'écrire l'algorithme "glouton" correspondant (en fait j'ai vu le besoin initial comme rechercher les sous-chaines d'une chaine).
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]
Hello,
C'est vrai qu'il faut se triturer l'esprit surtout en pensant récursivité à créer ce genre de oneliner (pas onliner ).Oui c'est ça. J'ai bien vu certains soucis (surtout la récursivité) mais c'est le onliner qui est magnifique
J'ai beaucoup de difficulté à créer ce genre de ligne, je manque de pratiques... il faut pour cela que je trouve le oneliner assez intuitif, sinon je ne cherche pas à le créer naturellement.
Concernant l'efficacité, il y a mieux, voir le dernier code de @josmiley
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
une bonne façon de s'initier pour moi c'est tenter l 'apprentissage d' haskell, sans aller jusqu'au bout ça m'a permis une approche différente de la prog.
Oui pour la partie récursivité haskell a un intérêt, mais pour les oneliners complexes, pas sûr que s'appuyer sur un langage fonctionnel ai un intérêt.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
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