Voglio scrivere una funzione che ripristina una lista [1,5,3,6,...]
e dà [1,1,5,5,3,3,6,6,...]
qualche idea su come farlo? grazieduplica ogni membro in una lista - python
risposta
>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
b.extend([i, i])
>>> b
[1, 1, 2, 2, 3, 3]
o
>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]
Dovresti usare '//' anche per la divisione floor in Python 2. –
@Mike: sicuro che hai ragione, tranne ovviamente nella divisione '/' assicura che 'int' viene restituito. – SilentGhost
>>> a = range(10)
>>> [val for val in a for _ in (0, 1)]
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]
N.B. _
viene tradizionalmente utilizzato come nome variabile segnaposto in cui non si desidera fare nulla con il contenuto della variabile. In questo caso è solo usato per generare due valori per ogni volta intorno al ciclo esterno.
Per trasformare questo da un elenco in un generatore, sostituire le parentesi quadre con le parentesi tonde.
'_' è, in questi giorni, utilizzato per i18n/l10n (google). Tendo ancora ad usarlo * se * so che non ci sarà un i18n in questo modulo. Altrimenti I (vorrebbe) usare '__' (due underscore). –
vorrei utilizzare
import itertools
foo = [1, 5, 3, 6]
new = itertools.chain.from_iterable([item, item] for item in foo)
new
sarà un iteratore che pigramente itera oltre gli elementi duplicati. Se è necessario calcolare l'elenco effettivo, è possibile eseguire list(new)
o utilizzare una delle altre soluzioni.
o più breve: 'itertools.chain.from_iterable (itertools.izip (foo, foo))' –
Ho considerato quel codice che è più breve ma non mi sembra più chiaro. –
Se hai già il roundrobin
ricetta descritto nella documentazione per itertools
-e è abbastanza a portata di mano, allora si può semplicemente utilizzare
roundrobin(my_list, my_list)
+1, questo è un buon modo per realizzare questo. –
Per quanto Guido non piace agli operatori funzionali, possono essere abbastanza dannatamente a portata di mano:
>>> from operator import add
>>> a = range(10)
>>> b = reduce(add, [(x,x) for x in a])
Nel caso di ridurre, maneggevole spesso significa incredibilmente lento. È importante misurare cosa sta facendo 'reduce'. Spesso, è scioccante quanto il calcolo riduca le forze. –
Ho creato uno script di test con tutti i metodi su questa pagina con baselist = range (10) e 1,000,000 iterations. Il più lento ha preso 5.094 secondi e il più veloce ha preso 3.622 secondi. Il mio esempio di riduzione ha richiesto 3.906 secondi. –
'range (10)' è piccolo, quindi la complessità paga un piccolo ruolo. Questa soluzione è quadratica; tutti gli altri che vedo qui sono lineari. Inoltre, alcuni degli altri mi sembrano più leggibili. –
userei zip
e itertools.chain
.
>>> import itertools
>>> l = [1,5,3,6,16]
>>> list(itertools.chain(*zip(l,l)))
[1, 1, 5, 5, 3, 3, 6, 6, 16, 16]
Nota: ho usato solo list
di consumare il generatore per renderla adatta per la stampa. Probabilmente non hai bisogno della chiamata list
nel tuo codice ...
È possibile utilizzare la moltiplicazione della lista. Caso hai bisogno di ogni membro della lista insieme basta usare il metodo ordinato.
>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]
E se si desidera mantenere l'ordine della lista originale? Che dire se gli articoli nell'elenco sono non ordinabili? – Moberg
- 1. Duplica una riga in SQL?
- 2. Python - Come ordinare una lista di liste per il quarto elemento in ogni lista?
- 3. Dividere una lista in python
- 4. Python trasformare una lista in una lista di tuple
- 5. Unire alcuni elementi di una lista in una lista Python
- 6. Operazione su ogni coppia di elementi in una lista
- 7. Membro statico di una funzione in Python?
- 8. somma ogni valore in una lista di tuple
- 9. Passa ogni elemento di una lista a una funzione che accetta più argomenti in Python?
- 10. converti una lista piatta in lista di elenchi in python
- 11. trovare l'oggetto dal suo membro all'interno di una lista in Python
- 12. Cordova 3.7 duplica iframe su ogni chiamata nativa
- 13. Python: iterate attraverso una lista
- 14. python converte una stringa in lista argomenti
- 15. Come tagliare una lista in Python
- 16. Passare una matrice/lista in Python
- 17. Trasporta con calma una lista in Python
- 18. copia profonda una lista in Python
- 19. Python - Trasformare l'input dell'utente in una lista
- 20. creazione di una lista predefinita in python
- 21. Python os.path.join() su una lista
- 22. Django: Query che utilizza contiene ogni valore in una lista
- 23. Come ottenere ogni altro elemento in una lista
- 24. Stile CSS per ogni secondo div in una lista
- 25. Python, zip liste multiple in cui una sola lista richiede due elementi ogni
- 26. lista weakref in python
- 27. Scrivere una lista in un file csv python, una nuova riga per lista
- 28. Come posso trasformare una stringa in una lista in Python?
- 29. Duplica un record in MySQL
- 30. Android: Copia/Duplica SharedPreferences
Suoni di lavoro domestico. Esistono modi migliori per lavorare con un elenco rispetto alla duplicazione degli elementi. –