Ich möchte eine Funktion schreiben, die eine Liste [1,5,3,6,...]
wiederbelebt und gibt [1,1,5,5,3,3,6,6,...]
eine Idee, wie es geht? dankduplizieren jedes Mitglied in einer Liste - Python
Antwort
>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
b.extend([i, i])
>>> b
[1, 1, 2, 2, 3, 3]
oder
>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]
Sie sollten '' '' '' auch für die Floor Division in Python 2 verwenden. –
@Mike: Sicher hast du Recht, außer natürlich in '/' division versichert, dass 'int' zurückgegeben wird. – 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. _
wird traditionell als Name einer Platzhaltervariablen verwendet, wenn Sie nichts mit dem Inhalt der Variablen tun möchten. In diesem Fall wird es nur verwendet, um zwei Werte für jedes Mal um die äußere Schleife herum zu erzeugen.
Um dies von einer Liste in einen Generator zu verwandeln, ersetzen Sie die eckigen Klammern durch runde Klammern.
'_' wird heute für i18n/l10n (google) verwendet. Ich tendiere immer noch dazu, es zu benutzen, wenn ich weiß, dass es in diesem Modul kein i18n geben wird. Sonst würde ich "__" (zwei Unterstriche) verwenden. –
Ich würde verwenden
import itertools
foo = [1, 5, 3, 6]
new = itertools.chain.from_iterable([item, item] for item in foo)
new
wird ein Iterator, lazily iteriert über den duplizierten Elemente sein. Wenn Sie die tatsächliche Liste berechnet benötigen, können Sie list(new)
tun oder eine der anderen Lösungen verwenden.
oder kürzer: 'itertools.chain.from_iterable (itertools.izip (foo, foo))' –
Ich dachte, dass Code, der kürzer ist, aber mir nicht klarer schien. –
Wenn Sie bereits die für itertools
in der Dokumentation beschrieben roundrobin
Rezept haben -und es ist recht praktisch-dann können Sie nur
roundrobin(my_list, my_list)
+1, dies ist ein guter Weg, dies zu erreichen. –
Für so viel verwenden, wie Guido die funktionellen Operatoren Abneigungen, können sie recht sein verflixte praktisch:
>>> from operator import add
>>> a = range(10)
>>> b = reduce(add, [(x,x) for x in a])
Im Fall von reduzieren bedeutet handy oft erstaunlich langsam. Es ist wichtig zu messen, was reduce macht. Oft ist es schockierend, wie viel Rechenleistung die Kräfte reduziert. –
Ich habe ein Testskript mit jeder der Methoden auf dieser Seite mit der Basisliste = Bereich (10) und 1.000.000 Iterationen gemacht. Der langsamste dauerte 5.094 Sekunden und der schnellste dauerte 3.622 Sekunden. Mein reduziertes Beispiel dauerte 3.906 Sekunden. –
'Bereich (10)' ist winzig, so dass die Komplexität eine kleine Rolle spielt. Diese Lösung ist quadratisch; Alle anderen, die ich hier sehe, sind linear. Außerdem scheinen mir einige der anderen lesbarer zu sein. –
würde ich zip
und itertools.chain
verwenden.
>>> import itertools
>>> l = [1,5,3,6,16]
>>> list(itertools.chain(*zip(l,l)))
[1, 1, 5, 5, 3, 3, 6, 6, 16, 16]
Hinweis: Früher habe ich nur list
den Generator verbrauchen, um es für den Druck fit zu machen. Sie brauchen wahrscheinlich nicht den list
Anruf in Ihrem Code ...
Es ist möglich, verwenden Sie die Liste Multiplikation. Falls Sie jedes Listenelement zusammen benötigen, verwenden Sie einfach die sortierte Methode.
>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]
Was ist, wenn Sie die Reihenfolge der ursprünglichen Liste beibehalten möchten? Was ist, wenn die Elemente in der Liste nicht mehr zuordenbar sind? – Moberg
- 1. Operation für jedes Elementelement in einer Liste
- 2. Löschen jedes nth Element aus einer Liste in Python 2.7
- 3. Alle Indizes jedes einzelnen Elements in einer Liste python
- 4. Eine verknüpfte Liste duplizieren
- 5. Hinzufügen einer Zeichenfolge vor einer Zeichenfolge für jedes Element in einer Liste in Python
- 6. openoffice: Zeilen einer Tabelle in Writer duplizieren
- 7. Python: Kopieren einer Liste in einer Liste
- 8. Anwenden von strptime Funktion auf jedes Mitglied einer data.table
- 9. Python - Vergleichen jedes Elements einer Liste mit jedem anderen Element in dieser Liste
- 10. Python-Liste: doppelt jedes Element in einer Liste unter Beibehaltung der Struktur
- 11. Wiederholung in Python für jedes Element der Liste
- 12. Einträge in der Dropdown-Liste duplizieren!
- 13. Python: Für jedes Listenelement eine Funktion in der Liste anwenden
- 14. Python JSON einer Liste
- 15. Finden min() & Sekunde min() für jedes Mitglied
- 16. Anwendung putstr auf jedes Element einer Liste
- 17. zu Finden Objekt von seinem Mitglied in einer Liste in Python
- 18. Python: Weisen Sie jedes Element einer Liste in einer separaten Variable
- 19. "Zeiger auf Mitglied" in Python
- 20. Python: Liste vorhandener Werte in einer Liste
- 21. Finden Unterklasse Mitglied in einer Liste der Oberklasse. C#
- 22. Überprüfen auf Mitglied Existenz in Python
- 23. Python Wie jedes erste Element in 2 Dimensional Liste
- 24. einen inkrementellen Zähler anhängen Werte zu duplizieren in Liste
- 25. R Funktion rep() in Python (repliziert Elemente einer Liste/Vektor)
- 26. wie in einer Liste Python
- 27. Emulation einer Liste in Python
- 28. Wie rekursiv duplizieren doppelt verkettete Liste C++
- 29. Vergleichen jedes Elements mit jedem anderen Element in einer Liste
- 30. Verschiedene Artikelvorlage für jedes Element in einer WPF-Liste?
Klingt heimlich. Es gibt bessere Möglichkeiten, mit einer Liste zu arbeiten, als die Elemente zu duplizieren. –