C'è un modo per costruire sequenze pigre in Python?
-
28-10-2019 - |
Domanda
C'è una vista django che si carica Member
Oggetti dal database con un determinato filtro.
Ora ho bisogno di cambiare questa logica in Presenta uno specifico Member
Innanzitutto, e lascia che il resto segua nel loro ordine naturale.
Il modo più semplice è eseguire subito la query, ottenere un elenco, rimuovere e inserire l'articolo all'inizio. Comunque sono molto curioso Se c'è ancora un modo per utilizzare QuerySet
Natura pigra.
In C#, scriverei:
IEnumerable<Member> members = db.Members; // db.Members is lazy
members = Enumerable.Union( // construct a lazy sequence that traverses its arguments
new [] { specificMember },
members.Where(m => m != specificMember)
);
Come passerebbe un ciclo members
, otterrebbe prima specificMember
e poi usa Qualunque sia la logica di caricamento pigra originale db.Members
Usato.
C'è un modo per fare lo stesso in Django e Python?
Soluzione
Uso itertools.chain
. Qualcosa di simile a:
import itertools
original_members = .... # get an iterator of the data
members = itertools.chain([specific_member], original_members)
La funzione a catena restituisce un iteratore. L'iteratore inizia restituendo il valore dalla sequenza nel primo parametro, che è un elenco a singolo elemento contenente specifico. Quindi inizia a restituire i valori da original_members
, che presumo sia una sequenza pigra.