Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/02/2013, à 23:50

bmzoom

[RESOLU] Python chaine vers liste

bonjour ,

Je ne vois pas comment passer une chaîne en liste:

tabf="000000000000000000000000000000000000000000000000000"
ttf=tabf.split("'")
print ttf

Cela donne : ['000000000000000000000000000000000000000000000000000']
Et il faut : ['0','0', ...                       ... '0']

Pour remplacer après  ttf[20]=5 , vu que une chaîne n'a pas d'indexation

A+

Dernière modification par bmzoom (Le 06/02/2013, à 13:58)

Hors ligne

#2 Le 06/02/2013, à 02:47

El Pensador

Re : [RESOLU] Python chaine vers liste

Bonjour,

Tu peux tout simplement utiliser la méthode list(). Exemple dans l'interpréteur Python :

>>> tabf="000000000000000000000000000000000000000000000000000"
>>> ttf = list(tbaf)
>>> ttf
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
 '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
 '0', '0', '0', '0', '0', '0', '0']

Ou sinon, en moins direct tu peux utiliser une boucle for :

ttf = []
for i in tabf:
    ttf.append(i)

« À quoi je sers ? Sans doute à rien du tout... »
A Tunisian Girl

Hors ligne

#3 Le 06/02/2013, à 03:29

nesthib

Re : [RESOLU] Python chaine vers liste

Les caractères d'une chaîne en python peuvent être accédés par leur index :

>>> s='abcde'
>>> s[2]
'c'

toutefois une chaîne est immuable et ne supporte pas d'affectation par index.

>>> s[2]='C'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

En revanche tu peux facilement faire :

>>> s[:2]+'C'+s[3:]
'abCde'

Ce qui donnerait avec une fonction :

>>> def remplace(s, n, car=''):
...     return s[:n]+car+s[n+1:]

>>> remplace(s, 2, 'C')
'abCde'

NB. cette solution est plus rapide que la méthode proposée par El Pensador (voire même beaucoup plus dès qu'on augmente la taille de la chaîne de caractères) :

def repl1(s, n, car=''):
    return s[:n]+car+s[n+1:]

def repl2(s, n, car=''):
    l=list(s)
    l[n]=car
    return ''.join(l)

timeit.timeit("repl1('abcdefghijklmnopqrstuvwxyz', 13, 'N')", setup="from __main__ import repl1", number=1000000)
# retourne 0.27860283851623535

timeit.timeit("repl2('abcdefghijklmnopqrstuvwxyz', 13, 'N')", setup="from __main__ import repl2", number=1000000)
# retourne 1.2946109771728516

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#4 Le 06/02/2013, à 09:44

bmzoom

Re : [RESOLU] Python chaine vers liste

ok - je passe à côté des commandes de base sans le savoir

>>> chaine=str(ttf)
>>> chaine
"['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 5, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']"
>>>
-------------------------------------
Pour revenir de la liste vers la chaîne est réunir les caractères "000000000000000000000000000000000000000000000000000" , il faut quelle syntaxe ?

A+

Hors ligne

#5 Le 06/02/2013, à 10:06

tiramiseb

Re : [RESOLU] Python chaine vers liste

Pour revenir de la liste vers la chaîne est réunir les caractères "000000000000000000000000000000000000000000000000000" , il faut quelle syntaxe ?

nesthib te l'a déjà montré :

''.join(ttf)

Hors ligne

#6 Le 06/02/2013, à 10:20

bmzoom

Re : [RESOLU] Python chaine vers liste

@ tiramiseb : il peut y avoir des pb interne à python ( objet , methode , attribut )

''.join(ttf)  >>> là  c'est attribut , methode  , objet

Je n'ai pas le catalogue de toutes les commandes pour savoir quand il faut mettre le clignotant à droite ou à gauche !

sad

Hors ligne

#7 Le 06/02/2013, à 10:27

tiramiseb

Re : [RESOLU] Python chaine vers liste

Je ne te dis pas que tu aurais pu deviner tout seul, je te dis que nesthib, dans la réponse juste au-dessus (dans la fonction qu'il a appelée "repl2") a montré exactement ce que tu cherches à faire. Donc il ne s'agit pas d'avoir un catalogue, il s'agit de lire les réponses qu'on te donne big_smile

Il a même montré une fonction plus performante... qui me semble préférable également (même si ça semble plus "sale" à première vue, la performance 5 fois supérieure est à prendre en considération).

Dernière modification par tiramiseb (Le 06/02/2013, à 10:27)

Hors ligne

#8 Le 06/02/2013, à 11:51

bmzoom

Re : [RESOLU] Python chaine vers liste

bah , la performance c'est de sortir un résultat , et pas d'optimiser 10 lignes !
Ca va mon prog principal est bon , et c'est pour décrypter un mot secret ( ce que je fais c'est en amateur , et je débute en python )

Ici 5 lignes de 50 caractères du code :
XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO
BRSFIBSSGQCFHSDOFHSZSUFOAASQOFGWASGDFSJWGWCBGGCBHS
MLRODXDKBOIBDOXKAGBRZLKZLROPFICXRQQOLRSBOIBJLQLDOB
TVMWSRHYGSQXIPIKEVSRUYMZETSVXIVGIXXIRSXITSYVVEWERW
XIONYMYWBULAYLXYPINLYXYJYWBYKOUHNUHIOMQUNMIHMCFSUO

Mon prog-1 prend tab1="XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO"
et fait des rotations sur les lettres

Quelle commande peut chercher les lignes 1 par 1 dans un fichier data.txt , faire le traitement de prog-1 , et ensuite
copier le résultat ligne par ligne dans un fichier sortie.txt ?

A+

Hors ligne

#9 Le 06/02/2013, à 11:58

tiramiseb

Re : [RESOLU] Python chaine vers liste

Si j'ai bien compris ce que tu veux faire, pour traiter ligne par ligne utilise readline...

data = file('data.txt', 'r')
sortie = file('sortie.txt', 'w')
for ligne in data.readline():
    nouvelleligne = <CE QUE TU VEUX>
    sortie.write(nouvelleligne)

Hors ligne

#10 Le 06/02/2013, à 12:00

tiramiseb

Re : [RESOLU] Python chaine vers liste

Tout ça, ce sont des choses assez basiques en Python. As-tu suivi des documentations d'introduction à Python ou acheté/lu des livres d'introduction ? Cela te serait bénéfique.

Hors ligne

#11 Le 06/02/2013, à 13:58

bmzoom

Re : [RESOLU] Python chaine vers liste

ok - Bien sur que c'est basique , et si j'ai une direction à suivre cela va plus vite
que 300 vérifications proposé par les auteurs de n'importe quel livre de programmation

Exemple :

Ecrivez un programme qui convertira en radians un angle fourni en degrés, minutes ,secondes
Faites le même de deg , min , sec vers radians ( ajouter après modulo 2 pi , qui n'est pas fourni dans l'énoncé )

[RESOLU]

Hors ligne

#12 Le 06/02/2013, à 14:14

tiramiseb

Re : [RESOLU] Python chaine vers liste

Il faut croire que tu lis les mauvais livres smile
Tu en trouveras aisément des bons qui donnent des situations concrètes et qui sont bien foutus !

Imagine si tout le monde venait se faire guider sur des forums comme ça... Ça saoulerait vite les bénévoles, qui en auraient marre d'expliquer des trucs de base smile

Les livres d'apprentissage, c'est fait pour apprendre,  non ? smile
En plus tu y apprendrais bien plus de choses qu'avec des questions "one-shot" comme ça !

J'ajouterai également que de genre de commandes sont expliquées sur le site officiel.

Hors ligne

#13 Le 06/02/2013, à 14:21

bmzoom

Re : [RESOLU] Python chaine vers liste

Un forum n'occupent pas tout le temps des bénévoles ..

Quand ils y restent trop longtemps , il y a un souci pour eux !

Hors ligne

#14 Le 06/02/2013, à 15:21

tiramiseb

Re : [RESOLU] Python chaine vers liste

En effet.
Tu dis ça parce que je devrais un peu plus travailler, c'est ça hein ? lol

Cela dit, s'il y a trop de questions trop basiques le forum risque d'avoir trop de questions sans réponses big_smile

Plus sérieusement, maintenant que je suis de retour à mon bureau (les derniers messages étaient depuis mon smartphone), je peux plus facilement te retrouver les liens suivants, qui me semblent bien pour débuter (la maîtrise de l'anglais est nécessaire, cela dit peu de choses en développement informatique permettent de se passer de l'anglais) :
http://docs.python.org/2/tutorial/
http://wiki.python.org/moin/BeginnersGuide

Et pour ma part, pour trouver "comment faire" dans plein de situations j'utilise beaucoup l'index des modules python :
http://docs.python.org/2/py-modindex.html

Hors ligne

#15 Le 06/02/2013, à 15:30

nesthib

Re : [RESOLU] Python chaine vers liste

@tiramiseb : je pense que c'est toujours bien d'essayer d'apprendre par soi-même, cela dit je te rejoins sur le fait qu'il y a énormément de bons tutoriels, livres et documentations sur python et qu'il serait dommage de s'en priver.

@bmzoom : voici un casseur de mot de passe par rotation. Je te donne la solution pour que tu puisses comprendre les commandes de bases et j'espère que ça te donnera envie de suivre les conseils de tiramiseb.

lettres='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
tab1="XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO"

def permute(s, n):
    '''cette fonction permute les caractères d'une chaîne s avec un incrément n'''
    out=''
    for c in s:
        i = lettres.index(c)
        out += lettres[(i + n) % len(lettres)]
    return out

for i in xrange(26):
    print(permute(tab1, i))

Essaie de comprendre le code, il ne s'agit que de commandes très basiques de python. Aide-toi de la documentation et essaie de commenter le code pour décrire ce que fait chaque ligne.

Dernière modification par nesthib (Le 06/02/2013, à 15:44)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#16 Le 06/02/2013, à 15:36

tiramiseb

Re : [RESOLU] Python chaine vers liste

nesthib : y'a un problème dans ton code : la variable "l" n'est pas définie.

à part ça...
tu aurais pu faire plus propre quand meme, des noms de variables à plus d'une lettre par exemple...
parce que là c'est peut-être un code simple mais il est un peu crado...
big_smile

Hors ligne

#17 Le 06/02/2013, à 15:44

nesthib

Re : [RESOLU] Python chaine vers liste

Pardon j'ai changé l en lettres au denier moment, tongue je corrige.

En ce qui concerne les variables à une lettre c'est pour laisser à bmzoom le soin de décortiquer le code par lui même, il n'y a rien de « crado » smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#18 Le 06/02/2013, à 15:51

bmzoom

Re : [RESOLU] Python chaine vers liste

Ok - tout est  bon a prendre et une grosse application est ce pour prevoir le rechauffement climatique ?
Avec mon prog j ai 10 fois plus vu que je permute les 26 lettres 1 par 1
Sur pc cela va vite et optimiser sera pour un autre post si necessaire

smile

Hors ligne

#19 Le 06/02/2013, à 15:54

nesthib

Re : [RESOLU] Python chaine vers liste

euh… je n'ai pas tout compris à ta phrase tongue

As-tu compris le morceau de code que je t'ai donné ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#20 Le 06/02/2013, à 16:44

bmzoom

Re : [RESOLU] Python chaine vers liste

ok - les 26 permutations sont faites - mon but était d'en avoir 1 par 1
dans le même bloc , avec une sortie dans un fichier différent (pour chaque bloc)
pass1
...
pass26

Passage 0:
XSDSBGSCPGSFJOVCZASGOAAOFHWBEISJCIGTSFSNPWSBRSRSAO
BRSFIBSSGQCFHSDOFHSZSUFOAASQOFGWASGDFSJWGWCBGGCBHS
MLRODXDKBOIBDOXKAGBRZLKZLROPFICXRQQOLRSBOIBJLQLDOB
TVMWSRHYGSQXIPIKEVSRUYMZETSVXIVGIXXIRSXITSYVVEWERW
XIONYMYWBULAYLXYPINLYXYJYWBYKOUHNUHIOMQUNMIHMCFSUO

Passage 1:
YTETCHTDQHTGKPWDABTHPBBPGIXC0JTKDJHUTGTOQXTCSTSTBP
...

Passage 2 :
ZU0UDIUERIUHLQXEBCUIQCCQHJYD0KULEKIVUHUPRYUDTUTUCQ
...

Passage 26 :

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

Vu que je bloque sur des détails , c'est très long !

nom == ['']
print 'Veuillez entrer 50 caracteres : '
nom=input()
print nom

nom == ['']
NameError: name 'nom' is not defined

Quelle synthaxe pour entrer 50 maudit caractères ?

http://www.larsen-b.com/static/intro_python/

Une intro , qui passe au dessus de input()
C'est vite du délire dans les fonctions , alors que la base
est d'obtenir des résultats , avant de se prendre la boule dans les fonctions ..

Dernière modification par bmzoom (Le 06/02/2013, à 16:54)

Hors ligne

#21 Le 06/02/2013, à 16:47

tiramiseb

Re : [RESOLU] Python chaine vers liste

http://docs.python.org/2/library/functi … #raw_input

>>> s = raw_input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"


J'ai même envie d'ajouter :
http://google.fr/?q=python+read+keyboard

Dernière modification par tiramiseb (Le 06/02/2013, à 16:48)

Hors ligne

#22 Le 06/02/2013, à 17:11

bmzoom

Re : [RESOLU] Python chaine vers liste

Le temps que je passe en python ne va pas me tuer

lol

Hors ligne

#23 Le 06/02/2013, à 17:52

nesthib

Re : [RESOLU] Python chaine vers liste

bmzoom a écrit :
nom == ['']
NameError: name 'nom' is not defined

Si tu fais ce genre d'erreurs, tu devrais définitivement lire une introduction à python. Tu confonds affectation de variable et test.

bmzoom a écrit :

Une intro , qui passe au dessus de input()
C'est vite du délire dans les fonctions , alors que la base
est d'obtenir des résultats , avant de se prendre la boule dans les fonctions ..

La base c'est déjà de comprendre les mécanismes du langages, il n'y a pas de honte à ne pas savoir, mais il est indispensable de les maîtriser pour pouvoir obtenir des résultats. wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#24 Le 06/02/2013, à 18:14

bmzoom

Re : [RESOLU] Python chaine vers liste

http://www.amazon.fr/Python-Pocket-Refe … d_sim_eb_4

Est ce bien pour résumer ce qu'il faut savoir ?

Hors ligne

#25 Le 06/02/2013, à 18:46

tiramiseb

Re : [RESOLU] Python chaine vers liste

Les "Pocket Reference" d'O'Reilly sont géniaux pour avoir les bases sous le coude rapidement.

Je n'ai pas celui sur Python mais j'en ai d'autres.

Cela ne dispense pas de lire une introduction pour comprendre les mécanismes du langages, mais ça aide vachement les débutants au quotidien (en tout cas moi ça m'aidait au quotidien quand j'étais débutant wink )



Et de manière générale les livres d'O'Reilly sont très bons.
Dommage qu'O'Reilly France ait fermé...

Dernière modification par tiramiseb (Le 06/02/2013, à 18:46)

Hors ligne