-1
votes

N'importez pas ast, convertissez deque des listes en liste de listes

J'utilise l'algorithme de Dijkstra dans mon code et il renvoie la sortie ci-dessous: Comment puis-je convertir ceci:

[[5.0, 10.0], [7.5, 9.0], [8.8, 8.48], [11.261467889908257, 9.956880733944955], [11.5, 
9.45], [14.4, 8.0], [15.47191011235955, 10.382022471910112], [17.0, 10.0]]

à la liste de la liste, comme ceci:

deque(['[5.0, 10.0]', '[7.5, 9.0]', '[8.8, 8.48]', '[11.261467889908257, 9.956880733944955]', '[11.5, 
9.45]', '[14.4, 8.0]', '[15.47191011235955, 10.382022471910112]', '[17.0, 10.0]'])
<class 'collections.deque'>

Je veux avoir une liste de listes auxquelles je peux accéder aux éléments de la liste et travailler avec eux.

Il existe un autre moyen de résoudre ce problème au lieu d'importer ast.


1 commentaires

[x for x in iterable] bien que je remarque que vous n'avez aucune liste dans cet iterable particulier. Vous obtiendrez ce qu'il y a réellement là-dedans. Voulez-vous vraiment juste poser des questions sur la conversion d'une chaîne en code Python ou l'analyse d'une chaîne?


3 Réponses :


2
votes

J'espère que ça aide:

In [168]: q
Out[168]:
deque(['[5.0, 10.0]',
       '[7.5, 9.0]',
       '[8.8, 8.48]',
       '[11.261467889908257, 9.956880733944955]',
       '[11.5, 9.45]',
       '[14.4, 8.0]',
       '[15.47191011235955, 10.382022471910112]',
       '[17.0, 10.0]'])

In [169]: [ast.literal_eval(x) for x in q]
Out[169]:
[[5.0, 10.0],
 [7.5, 9.0],
 [8.8, 8.48],
 [11.261467889908257, 9.956880733944955],
 [11.5, 9.45],
 [14.4, 8.0],
 [15.47191011235955, 10.382022471910112],
 [17.0, 10.0]]

Une autre méthode plus courte et meilleure:

In [162]: q
Out[162]:
deque(['[5.0, 10.0]',
       '[7.5, 9.0]',
       '[8.8, 8.48]',
       '[11.261467889908257, 9.956880733944955]',
       '[11.5, 9.45]',
       '[14.4, 8.0]',
       '[15.47191011235955, 10.382022471910112]',
       '[17.0, 10.0]'])

In [163]: [[float(x) for x in x.replace('\'','').replace('[','').replace(']','').split(',')] for x in q]
Out[163]:
[[5.0, 10.0],
 [7.5, 9.0],
 [8.8, 8.48],
 [11.261467889908257, 9.956880733944955],
 [11.5, 9.45],
 [14.4, 8.0],
 [15.47191011235955, 10.382022471910112],
 [17.0, 10.0]]


0 commentaires

0
votes

en utilisant eval() ou .literal_eval() et la compréhension de list :

import ast
from collections import deque
q = deque(['[5.0, 10.0]', '[7.5, 9.0]', '[8.8, 8.48]', '[11.261467889908257, 9.956880733944955]', '[11.5, 9.45]', '[14.4, 8.0]', '[15.47191011235955, 10.382022471910112]', '[17.0, 10.0]'])
ans = [ast.literal_eval(x) for x in q]
print(ans)
# output 
[[5.0, 10.0], [7.5, 9.0], [8.8, 8.48], [11.261467889908257, 9.956880733944955], [11.5, 9.45], [14.4, 8.0], [15.47191011235955, 10.382022471910112], [17.0, 10.0]]



0
votes

Essayer:

>>> from collections import deque
>>> d = deque(['[5.0, 10.0]', '[7.5, 9.0]', '[8.8, 8.48]', '[11.261467889908257, 9.956880733944955]', '[11.5, 9.45]', '[14.4, 8.0]', '[15.47191011235955, 10.382022471910112]', '[17.0, 10.0]'])
>>> [eval(q) for q in d]
[[5.0, 10.0],
 [7.5, 9.0],
 [8.8, 8.48],
 [11.261467889908257, 9.956880733944955],
 [11.5, 9.45],
 [14.4, 8.0],
 [15.47191011235955, 10.382022471910112],
 [17.0, 10.0]]


2 commentaires

Utiliser eval () de python contre ast.literal_eval ()?


Si votre entrée n'est pas une entrée utilisateur fiable, vous devez en effet utiliser ast.literal_eval() .