Mam liczbę całkowitą i listę. Chciałbym utworzyć nową listę zaczynającą się od zmiennej i kończącą na liście. Pisanie a + list
Dostaję błędy. Kompilator obsługuje a
jako liczbę całkowitą, więc nie mogę używać rozszerzenia lub rozszerzać. Jak to zrobić?Dodawanie liczby całkowitej do początku listy w Pythonie
Odpowiedz
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li # Don't use 'list' as variable name.
[5, 1, 2, 3]
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]
Jak to działa:
array.insert(index, value)
wstawić element w danym położeniu. Pierwszym argumentem jest indeks elementu, przed którym należy wstawić, więc array.insert(0, x)
wstawia z przodu listy, a array.insert(len(array), x)
jest równoważne. Negatywne wartości są traktowane jako odnoszące się do końca tablicy.
Najbardziej efektywne podejście. Szybsza niż [x] + [y]. Zobacz rozwiązania tutaj: http://stackoverflow.com/questions/8537916/whats-the-idiomatic-syntax- for-prepending-to-a-short-python-list –
Pytanie jasno stwierdza, że należy utworzyć _new_ listę. Może to być szybkie, ale błędne. ;-) – BlackJack
@BlackJack Pytanie dotyczy sposobu dodania liczby całkowitej do początku listy. Cokolwiek opisał, nie jest właściwe. Więc po co mu kierować, by podążał niewłaściwą ścieżką? kiedy są lepsze rzeczy, które może zrobić dla swoich wymagań. – Nullify
Innym sposobem robi to samo,
list[0:0] = [a]
Nie potrzebujesz pierwszego 0. Okrężnica już mówi, że to przed startem - my_list [: 0] = [a] robi to. –
Eleganckie rozwiązanie! – Shejo284
Zauważ, że jeśli staramy się robić tej operacji często, zwłaszcza w pętli, lista jest niewłaściwa struktura danych.
Listy nie są zoptymalizowane dla modyfikacji z przodu, a somelist.insert(0, something)
to O(n) operation.
somelist.pop(0)
i del somelist[0]
są również operacjami O (n).
Poprawną strukturą danych do użycia jest deque
z modułu collections
. deques ujawniają interfejs podobny do tych z list, ale są zoptymalizowane pod kątem modyfikacji z obu punktów końcowych. Mają one metodę wstawiania z przodu appendleft
.
Demo:
In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop
- 1. Dzielenie liczby całkowitej w Pythonie?
- 2. konwersja liczby całkowitej na listę w pythonie
- 3. Runda do najbliższej liczby całkowitej
- 4. Zaokrąglanie liczby całkowitej do najbliższej wielokrotności innej liczby całkowitej
- 5. Konwersja ciąg do liczby całkowitej, używając mapy()
- 6. podwójna konwersja do liczby całkowitej w java
- 7. Łączy ciąg do liczby całkowitej w SML
- 8. Konwersja daty do liczby całkowitej w Javie
- 9. Jak zaokrąglić do liczby całkowitej w R?
- 10. Konwersja wykładniczej do liczby całkowitej w PHP
- 11. Wykrywanie przepełnienia liczby całkowitej
- 12. C++ Sprawdzanie liczby całkowitej.
- 13. Wykrywanie przepełnienia liczby całkowitej
- 14. Obsługa jako argument listy lub pojedynczej liczby całkowitej
- 15. javascript - jak zaokrąglić do najbliższej liczby całkowitej
- 16. Static_cast adres liczby całkowitej do wskaźnika
- 17. GO lang - stała obcięta do liczby całkowitej
- 18. Jak zaokrąglić liczbę do wybranej liczby całkowitej
- 19. konwersja tablicy ciąg do liczby całkowitej tablicę
- 20. BitSet do iz liczby całkowitej/długi
- 21. Binarny ciąg do liczby całkowitej z "atoi()"
- 22. C# - Wiązanie pola tekstowego do liczby całkowitej
- 23. Ada95: Konwersja liczby całkowitej do postaci
- 24. CSS 3: Dodawanie cytatu do początku cytowania
- 25. Android: Dodawanie statycznego nagłówka do początku ListActivity
- 26. Jak używać Pythona `secret` module do generowania losowej liczby całkowitej?
- 27. Zwięzłe dodawanie wektorów w Pythonie?
- 28. Dodawanie szumu do sygnału w pythonie
- 29. Vimdiff: wyświetlanie całkowitej liczby zmian
- 30. Jak uniknąć przepełnienia liczby całkowitej?
Właśnie zrobiłem kilka badań porównawczych. 'li.insert (0, a)' jest około 5 razy szybsze niż 'li = [a] + li'. Miej to na uwadze, jeśli robisz to wiele razy. –
@MarcelPfeiffer Należy zauważyć, że 'li.insert (0, a)' mutuje 'li'. 'li = [a] + li' tworzy nową instancję wszystkie wartości. Jest to ważne rozróżnienie, jeśli inne rzeczy mają odniesienie do instancji listy. – unholysampler
Byłoby miło dla Pythona dodać funkcję list.push_front (element). Będzie to oczywiste i mniej podatne na błędy. –