Chcę napisać funkcję, która ożywia listę [1,5,3,6,...]
i daje [1,1,5,5,3,3,6,6,...]
jakikolwiek pomysł, jak to zrobić? dziękiduplikowanie każdego członka na liście - python
Odpowiedz
>>> a = [1, 2, 3]
>>> b = []
>>> for i in a:
b.extend([i, i])
>>> b
[1, 1, 2, 2, 3, 3]
lub
>>> [a[i//2] for i in range(len(a)*2)]
[1, 1, 2, 2, 3, 3]
Powinieneś użyć '//' do podziału piętra również w Pythonie 2. –
@Mike: masz rację, z wyjątkiem oczywiście w '/' division zapewnia powrót 'int'. – 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]
nb _
jest tradycyjnie używany jako nazwa zmiennej zastępczej, w której nie chcesz nic robić z zawartością zmiennej. W tym przypadku służy tylko do generowania dwóch wartości za każdym razem wokół zewnętrznej pętli.
Aby przekształcić tę listę z listy w generator, zamień nawiasy kwadratowe na nawiasy okrągłe.
'_' jest obecnie używany do i18n/l10n (google). Nadal go używam * jeśli * Wiem, że w tym module nie będzie i18n. Inaczej ja (chciałbym) użyć '__' (dwa podkreślenia). –
użyłbym
import itertools
foo = [1, 5, 3, 6]
new = itertools.chain.from_iterable([item, item] for item in foo)
new
będzie iterator że lazily iteracje nad powielonych elementów. Jeśli potrzebujesz rzeczywistej wyliczonej listy, możesz wykonać list(new)
lub skorzystać z jednego z innych rozwiązań.
lub krótszy: 'itertools.chain.from_iterable (itertools.izip (foo, foo))' –
Rozważyłem ten kod, który jest krótszy, ale nie wydawał mi się jaśniejszy. –
Jeśli masz już roundrobin
receptury opisane w dokumentacji dla itertools
-i to jest bardzo przydatny, to możesz po prostu użyć
roundrobin(my_list, my_list)
+1, jest to dobry sposób, aby to osiągnąć. –
Na ile Guido lubi operatorów funkcjonalne, mogą być dość cholernie przydatny:
>>> from operator import add
>>> a = range(10)
>>> b = reduce(add, [(x,x) for x in a])
W przypadku zmniejszenia, przydatne często oznacza zadziwiająco wolne. Ważne jest mierzenie tego, co robi 'redu". Często szokujące jest to, jak bardzo obliczenia zmniejszają siły. –
Zrobiłem skrypt testowy za pomocą każdej z metod na tej stronie z baselist = range (10) i 1 000 000 iteracji. Najwolniej zajęło 5,094 sekundy, a najszybsze 3,622 sekundy. Mój przykład redukcji trwał 3.906 sekund. –
'zakres (10)' jest mały, więc złożoność płaci niewielką rolę. To rozwiązanie jest kwadratowe; wszystkie inne, które tu widzę, są liniowe. Także niektóre inne wydają mi się bardziej czytelne. –
użyłbym zip
i 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]
Uwaga: ja tylko używane list
spożywać generator, aby go dopasować do drukowania. Prawdopodobnie nie potrzebujesz połączenia list
w swoim kodzie ...
Możliwe jest użycie mnożenia listy. Sprawa, której potrzebujesz każdemu członkowi listy razem, wystarczy użyć posortowanej metody.
>>> lst = [1,2,3,4]
>>> sorted(lst*2)
[1,1,2,2,3,3,4,4]
Co się stanie, jeśli chcesz zachować kolejność oryginalnej listy? A co się stanie, jeśli pozycje na liście nie będą podlegały reglamentacji? – Moberg
- 1. Zliczanie liczby wystąpień każdego elementu na liście
- 2. Python: kopiowanie listy na liście
- 3. Python: Wyjątkowość na liście list
- 4. Pomijanie elementów na liście Python
- 5. Python struct.pack() dla poszczególnych elementów na liście?
- 6. Edytuj wartość każdego N-tego elementu na liście
- 7. Dodać limit wokół każdego ciągu na liście w jinja2?
- 8. Jak dodać liczbę całkowitą do każdego elementu na liście?
- 9. Porównywanie każdego elementu ze sobą elementem na liście
- 10. zliczają każdego elementu na liście [Lista [t]] w Scala
- 11. Python Dostęp do wartości na liście słowników
- 12. Python MySQLDB: Pobierz wynik pobrania na liście
- 13. znajdowanie ostatniego wystąpienia pozycji na liście python
- 14. Na liście chyba pusty w python
- 15. Obsługa wątków "duplikowanie" zadań
- 16. Różne ustawienia * .csproj/* .config dla każdego członka zespołu i oddziału
- 17. Dlaczego moja HashMap pozwala na duplikowanie kluczy?
- 18. jak zrobić punkt przerwania na funkcji członka klasy python?
- 19. Funkcja członka wywołania dla każdego elementu w pojemniku
- 20. Jak mogę wybrać najnowsze wejście dla każdego członka?
- 21. Duplikowanie zlokalizowanych plików zasobów
- 22. Powoduje duplikowanie identyfikatorów jQuery?
- 23. Przenieść pozycję na liście?
- 24. Jaki jest najlepszy sposób na duplikowanie danych w szablonie django?
- 25. Wiele remote_form_for na tej samej stronie powoduje duplikowanie identyfikatorów
- 26. log4j i weblogic: duplikowanie logów
- 27. Schemat XML nadal pozwala na duplikowanie identyfikatorów z unikatowym
- 28. przechowywać 2 najwyższe wartości każdego wiersza w liście macierzy r
- 29. python: lista kontra krotka, kiedy używać każdego?
- 30. C++ Wskaźnik do członka członka
Brzmi świetnie. Istnieją lepsze sposoby pracy z listą niż duplikowanie elementów. –