Ho notato qualcosa che non mi aspettavo quando ho scritto una sceneggiatura stamattina. Ho provato ad usare una list comprehension e ad ordinare tutto in una sola affermazione ottenendo un risultato sorprendente. Il codice seguente riassume il mio caso uso generale, ma è semplificata per questa domanda:Ordinamento di una comprensione di lista in una istruzione
Transaction = namedtuple('Transaction', ['code', 'type'])
my_list = [Transaction('code1', 'AAAAA'), Transaction('code2', 'BBBBB'), Transaction('code3', 'AAAAA')]
types = ['AAAAA', 'CCCCC']
result = [trans for trans in my_list if trans.type in types].sort(key = lambda x: x.code)
print result
uscita:
None
Se creo l'elenco utilizzando la comprensione, poi ordinare dopo il fatto, tutto è bene. Sono curioso perché questo succede?
i metodi 'sort' ordina l'elenco * in-place * e quindi restituisce' None'. – sloth