OVH Cloud OVH Cloud

Convertir string vers liste

22 réponses
Avatar
moky
Bonjour à toutes et à tous


Si j'ai une chaîne de caractère a="23", je peux faire x=int(a) pour
avoir un nombre x.
J'aimerais faire la même chose avec des listes. J'ai une chaîne de
caractère
[[x = -3.641879138963874,y = 3.706332781387099],x =
-1.958120861036126,y= 2.627000551946235]]

Et je voudrais en faire une liste telle que

L[0] soit la liste [x = -3.641879138963874,y = 3.706332781387099]



Pour le contexte, je suis en train de vouloir résoudre des équations
avec maxima, et j'analyse la sortie pour créer une liste de solutions.
Au final, à partir de la chaîne
[[x = -3.641879138963874,y = 3.706332781387099],x =
-1.958120861036126,y= 2.627000551946235]]

je voudrais avoir la liste
[[-3.641879138963874,3.706332781387099] ,
[-1.958120861036126,2.627000551946235]]

avec
L[0][0]=-3.641879138963874
L[0][1]=3.706332781387099
L[1][0]=-1.958120861036126
L[1][1]=2.627000551946235

Pour l'instant, je fais des manipulations à coup de recherches des
caractères "[","]" et ",", mais c'est un peu l'horreur.

Si vous avez des idées de comment faire facilement, je suis preneur

Bonne nuit
Laurent

2 réponses

1 2 3
Avatar
moky
> Quant à taxer de "plus alarmiste que réaliste" le fait de rappeler une
règle de sécurité *de base* (ne pas faire confiance aux entrées
utilisateur), je trouve ça pour le moins surprenant.



En tant que OP, je plussoie et remercie qu'on m'ait attiré l'attention
sur ce problème.
Dans mon cas, il n'y a toutefois pas à s'en arracher les cheveux parce
que je ne passe pas à eval() une entrée utilisateur, mais la sortie d'un
programme :
Je fais un
commands.getoutpu("maxima --batch-string="display2d:false;"+ligne+";")

où "ligne" est la commande maxima adaptée au calcul que je veux faire
(essentiellement, calculer des dérivées de fonctions et des extrema). Le
string "ligne" est donc composé par mon programme sur base de la donnée
d'une fonction par l'utilisateur.

Faudrait être incroyablement sioux pour trouver une fonction dont la
dérivée s'écrit comme une commande python qui permette d'exploiter la
faille !

Pour le principe, je ne vais quand même pas utliser eval().

Merci
bonne aprème
Laurent
Avatar
Michel Claveau - NoSpam SVP ; merci
Re !

tu a oublié de mentionner os.system() etc, ou les injections SQL, ou
<ami-lecteur-ajoute-ta-faille-favorite-ici>.



Non, je n'ai pas oublié. Mais, afin d'éviter une usure prématurée de mon
clavier, et de limiter le risque d'ampoules au bout de mes jolis petits
doigts, j'ai préféré regroupé tout ça, et les autres cas que tu n'as pas
cités, sous le terme générique "etc." (lui-même abréviation de "et
caetera", comme tu le sais sans doute déjà) ;o)

@+
--
Michel Claveau
1 2 3