Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / Question de liste...

Question de liste...

Remonter à Forum général Python

Question de liste...

Envoyé par jeromef le 6 Décembre 2013 à 15:03

Bonjour

Débutant en python je butte depuis 2 jours sur ce problème.

J'aimerais transformer cette liste:

a=['url1', 'url2', 'url3']

en :

a=[('radio1', 'url1','radio' ), ('radio2', 'url2','radio' ), ('radio3', 'url3','radio' )]

Quelqu'un pour sauver le peu de cheveux qu'ils me restent ?

thx

Re: Question de liste...

Envoyé par jeromef le 6 Décembre 2013 à 15:37

D'ailleurs j'en profite pour rajouyter que si vous êtes bon:

 -  en python

 - pédagogue

 - parisien... je cherche un prof contre rémunération pour débloquer et progresser plus vite

Interessés ? Répondez moi avec vos coordonnées.

Bon we a tous

Re: Question de liste...

Envoyé par mystiro le 11 Décembre 2013 à 02:25

Bonjour,

la façon de faire la plus simple que je vois c'est d'utiliser une liste en intention, c'est à dire une liste que l'on construit par une définition au lieu d'en énumérer les composants. C'est un peu comme en mathématique pour définir l'ensemble des nombres pairs : on peut décrire l'ensemble comme ça : {0, 2, 4, 6, ...} mais c'est long et peu précis. Ou alors on le décrit comme ça : {2x | x dans IN}

 

Voyons ça en python:
a=['url1', 'url2', 'url3']

[("radio", x, "radio") for x in a]       -> [("radio", "url1", "radio"), ("radio", "url2", "radio"), ("radio", "url1", "radio")]
Nous sommes proches du but mais il manque les indices pour le premier «radio». On va utiliser enumerate :
for indice, item in enumerate(a):
    print str(indice) + "--" + item                        -> "0--url1"      -> "1--url2"      ->"2--url3"
On voit que les indices sont décalés donc on pensera à ajouter 1.
On construit finalement notre liste :
a=[("radio" + str(1 + i), x, "radio") for i, x in enumerate(a)]
Et le tour et joué.

Re: Question de liste...

Envoyé par jeromef le 11 Décembre 2013 à 08:49

Un double merci... pour la qualité de votre réponse tout d'abord et pour mes cheveux ensuite :)
Débutant en python je crois avoir tout compris !

J'en profite pour soumettre une question d'ordre plus macro, je débute un projet de radio / reveil / mp3 sur Raspberry en python afin d'appréhender le langage et des questions comme ca j'en ai 4 fois par jour... que ce soit pour la conception du modèle, pour les choix , les options prises... bref tout pose question et j'ai largement l'impression de manquer de retours / confrontation.

J'ai donc cherché un prof de python pour lui soumettre tout ca ... mais sans succès jusque la (j'en profite pour réitérer la demande !) et je me demandais si vous aviez un conseil pour un débutant qui s'auto forme. La meilleure façon serait elle de :

 - poster le code en espérant des retours ?

 - faire un tuto avec ce que j'ai (en espérant des retours) ?

 - faire un blog de mes galères sur python...(en espérant...), j'ai commencé :) ?

Et vous comment envisageriez vous cela ? comment avez vous débuté en python ? l'auto formation n'a t elle pas des limites et comment les surpasser ?

D'avance merci pour toutes vos suggestions !



Re: Question de liste...

Envoyé par mystiro le 13 Décembre 2013 à 00:55

La question que tu poses est courante mais jamais facile notamment car elle est très personnelle. Si tu m'y autorises, je vais répondre en sens inverse. Je précise tout de suite que je suis assez vieille école dans ma façon de voir l'apprentissage et que tout le monde ne sera pas d'accord avec moi.

J'ai débuté la programmation avec des choses barbares comme le vbs et le batch (j'étais alors sous windows). Cela ne m'a servi à rien. J'ai vraiment commencé quand sous linux j'ai voulu apprendre la ligne de commande. C'est sans doute la meilleur chose qui me soit arrivé. En effet, le soucis lorsqu'on apprend à programmer, ce n'est pas la syntaxe. Celle-ci peut toujours se contourner avec des connaissances de base. Par exemple le problème plus haut aurait pu se faire avec une boucle for, une liste et une variable temporaire sans difficulté majeure de syntaxe. Par contre, la vrai difficulté de la programmation c'est de savoir ce qu'il est possible de faire. Il est très difficile d'imaginer faire quelque chose que l'on a jamais vu. Pour cela des langages tels que le bash sont merveilleux en raison de l'extrème interractivité qu'ils proposent. Toute la difficulté est applanie, les résultats concrets arrivent immédiatement. En contrepartie, on apprend à faire de grandes choses avec de petites briques qui sont toujours les mêmes : c'est la philosophie unix. Cette façon de penser est très utile ensuite pour faire des choses dans des langages qui partagent à un moindre niveau cette philosophie comme python. Tout ceci s'est fait en autonomie complète, je n'avais personne pour m'indiquer comment faire. C'est la façon de faire la plus difficile mais je ne la regrette pas.

Après un certain temps je me suis retrouvé bloqué. J'avais l'impression de ne pas pouvoir en savoir plus. Je me trompais bien entendu, mais c'est que je n'étais pas confronté à de nouveaux problèmes et que je ne pouvais donc pas les imaginer. C'est je pense le plus gros écueil de l'apprentissage en solitaire : le manque d'idées nouvelles. Cela mine la productivité. Pour y pallier, il faut lire des codes, des exemples, des découvertes. Il faut chercher comment fonctionnent les choses. C'est difficile. La meilleur façon est sans aucun doute de se trouver un mentor, quelqu'un qui puisse nous faire progresser car il a une vision des choses plus poussée.

Partant de là, un langage de programmation est une langue comme une autre. Il y a des domaines où elle est plus parlée que d'autres et il faut la pratiquer souvent pour apprendre du vocabulaire, s'imprégner de la syntaxe et finalement pouvoir tenir nos propres discours.

 

Assez parlé de moi, passons aux choses concrètes.

Il faut lire autour du langage. C'est indispensable. On n'apprend pas un langage dans un livre, on l'apprend en écoutant les autres le parler. Aussi, voici une petite liste de sites très pertinents sur le sujet. Aucun d'entre eux ne propose de tutoriel à proprement parler, mais c'est ce qui fait leur force.

http://sametmax.com : la référence francophone. Je n'en vois pas de meilleur honnètement. Attention par contre, le contenu est parfois destiné à un public averti et majeur. C'est leur style quoi.

http://infographiste-prod.ch/la_hyene/ : de très intéressants scripts qui donnent des idées d'utilisation très sympa.

http://stackoverflow.com : si on cherche une réponse, quelqu'un a déjà posé la question sur ce site. En anglais par contre.

http://docs.python.com : l'indispensable est sublissime doc en ligne.

J'en profite pour préciser que si tu n'est pas à l'aise avec l'anglais, c'est une bonne chose que de t'y mettre. L'anglais est la langue de l'informatique et beaucoup de ressources très pertinentes ne sont disponible que dans la langue de shakespear. Ce n'est pas vrai que pour python.

 

Concernant plus spécifiquement le cas de ta gestion de projet, j'aurais tendance à choisir le blog. Par contre, il faut que tu invites les gens à venir dessus, poster son addresse ici ne me semble pas incongru. Cependant cela ne remplace pas le contact direct avec quelqu'un. Je ne me sens pas le temps de jouer les profs particuliers, mais si tu as des questions, n'hésites pas à passer me faire un coucou sur irc : #cym13 sur irc.europnet.org.

Re: Question de liste...

Envoyé par jeromef le 16 Décembre 2013 à 13:01

Hello 

Merci pour ta réponse. Toutefois je me demande si je n'ai pas besoin de précision. Je suis tout a fait d'accord avec la plupart de ce que tu dis sur la formations pourtant je crois sentir (et peut être mon odorat est il faussé en ces temps froids) quelquechose comme "mais il faut galèrer tout seul pour avancer". Or pour cela je ne suis pas d'accord, il me semble que la meilleure et la plus riche façon d'avancer / progresser reste l'échange (je passe sous silence la condition minimale évidente du travail / motivation !).

Mais tu vois par exemple, rester bloquer sur certains problème comme celui ci : Si on peut me dire pourquoi un "\n" est rajouté à la fin de chaque Tuple de ma liste radios ?? me semble assez stérile et peu enrichissant de bloquer la dessus.

---------------------

import urllib

sock = urllib.urlopen("http://gromfiot.free.fr/radios.txt")

radios = []
for i in sock:
radio1 = sock.readline()
radio = tuple(radio1.split(','))
radios.append(radio)

print radios

---------------------

Quoiqu'il en soit j'apprécie beaucoup les échanges et le codes de mon radio réveil en python sur mon raspberry pi sera bientôt en ligne ... enfin bientôt ca dépendra de la vitesse de progression :)

Bonne journée à tous

J./

Re: Question de liste...

Envoyé par jeromef le 16 Décembre 2013 à 13:41

J'en profite pour déposer le GITHUB de mon projet APiClock (Web App pour accéder à radio réveil (controle de MPD) sur Raspberry Pi)

https://github.com/jeromefiot/apiclock

Et mon blog qui avance au fur et à mesure de ms découvertes (méthodo / python... et parfois div)

Bien évidemment vos remarques, envies, questions sont plus que bienvenues et j'essayes dasn la mesure du possible d'y répondre !

Au plaisir

Re: Question de liste...

Envoyé par jeromef le 16 Décembre 2013 à 13:53

le blog en question : jeromefiot.no-ip.org

Re: Question de liste...

Envoyé par mystiro le 16 Décembre 2013 à 18:02

Bonsoir,

je ne cherche pas à dire que l'on apprend seulement en galérant, c'est juste que c'est ainsi que j'ai appris et que je n'ai pas de raison d'en être mécontent. Pour autant, je pense que galérer est nécéssaire au moins dans une certaine mesure. Les problèmes que l'on ne peut pas résoudre en galérant sont rares.

 

Par exemple, dans le petit code que tu proposes, la question « Pourquoi y a-t-il des retours à la ligne » se résout vite en posant des print un peu partout pour visualiser les données au fur et à mesure. Ce serait une erreur de donner la solution à tout les problèmes de la sorte car on n'avance pas sans apprendre à réfléchir par soi-même et que les techniques de débuggage sont une compétence à par entière qui doit s'obtenir.

La seconde question qui vient (« Comment me débarasser de ces retours à la ligne ? ») est tout à fait différente et mérite peut-être que l'on y accorde moins de temps en ceci que la solution sera ponctuelle alors que la compréhension d'un phénomène sert toujours (on aura le droit de n'être pas d'accord avec moi là-dessus).

Enfin, il y a aussi les choses qui ne peuvent s'apprendre que de la communauté : ici, il serait de bon goût de penser à fermer le socket avec sock.close après le for (c'est à dire une fois qu'il a été lu et n'est plus utile). C'est toujours bon de faire le ménage derrière soit quoi.

 

Bon, je ne vais pas poster de solution au problème cette fois-ci : rajoute un "print sock.read()" juste avant ton for et si tu ne trouves pas je la donnerai.

Note : je ne fais pas cela pour appuyer mon point comme quoi il faut galérer ; le fait est que tu as toutes les billes en main pour comprendre le problème et le résoudre, ce ne serait pas t'aider que de réfléchir à ta place.

Re: Question de liste...

Envoyé par jeromef le 29 Janvier 2014 à 16:32

Je ne peux m'empêcher de poster pour faire un point sur l'avancement de mon apprentissage "Python". Pour la faire courte et répondre encore une fois à l'argument qui ne me satisfait pas du "il faut galèrer !" qui en fait si je carricature un peu semble sous entendre 2 choses :

 - tu ne fais pas assez d'effort

 - l'apprentissage ne se fait pas dans le plaisir

On se croirait revenu dans une lointaine contrée... et ce que je devine du paysage qui se profile derrière ces pensées ne me plait guère. 

Je reviens d'une initiation à "Processing" (ouverte à tous : cf. http://www.gaite-lyrique.net/processing-introduction). J'ai appris en 2h BEAUCOUP plus qu'en 1 semaine à faire du python le soir et ce uniquement grace à l'échange avec le formateur (hello Jerome). D'ailleurs il ne m'a pas fait le programme que je souhaitais réaliser lors de cet atelier mais donné tous les éléments, ou comment les trouver, pour cela.

Ca fait du bien.

Je suis toujours en quête d'une personne physique qui souhaiterait se substituer à Google et tous les tutorials qui trainent :)

Une dernière question, j'ai pas vraiment compris la raison d'une inscription à l'AFPY (les jobs sont publiques) ?

Rendu par Ploneboard