2010-02-17 9 views

risposta

1

Scrivere una funzione di supporto.

Ecco una versione piuttosto lunga, ma sono sicuro che c'è un trucco per comprimerlo.

>>> def helper(lst): 
    lst1, lst2 = [], [] 
    for el in lst: 
     lst1.append(el[0]) 
     lst2.append(el[1]) 
    return lst1, lst2 

>>> 
>>> helper([[1,2],[3,4],[5,6]]) 
([1, 3, 5], [2, 4, 6]) 
>>> 

aggiungere anche questo helper:

def myplot(func, lst, flag): 
    return func(helper(lst), flag) 

e chiamarlo in questo modo:

myplot(plt.plot, [[1,2],[3,4],[5,6]], 'ro') 

In alternativa si potrebbe aggiungere una funzione per un oggetto già un'istanza.

54

si può fare qualcosa di simile:

a=[[1,2],[3,3],[4,4],[5,2]] 
plt.plot(*zip(*a)) 

Purtroppo, non è più possibile passare 'ro'. È necessario passare valori dei marker e stile di linea come parametri di parole chiave:

a=[[1,2],[3,3],[4,4],[5,2]] 
plt.plot(*zip(*a), marker='o', color='r', ls='') 

Il trucco che ho usato è unpacking argument lists.

+6

Di solito uso 'plt.plot (* np.transpose (a))' (dove ho chiamato 'import numpy as np'), che è equivalente a quello che hai suggerito. –

9

Se si utilizza matrice NumPy si potrebbe estrarre per asse:

a = array([[1,2],[3,3],[4,4],[5,2]]) 
plot(a[:,0], a[:,1], 'ro') 

Per le liste o elenchi avrete bisogno di un po 'di aiuto, come:

a = [[1,2],[3,3],[4,4],[5,2]] 
plot(*sum(a, []), marker='o', color='r') 
8

list comprehension

Consiglio caldamente l'applicazione liberale delle list comprehensions. Non solo sono concisi e potenti, ma tendono a rendere il tuo codice molto leggibile.

provare qualcosa di simile:

list_of_lists = [[1,2],[3,3],[4,4],[5,2]]  
x_list = [x for [x, y] in list_of_lists] 
y_list = [y for [x, y] in list_of_lists] 

plt.plot(x_list, y_list) 

Argomento disimballaggio dovrebbe essere evitato. È brutto.

Problemi correlati